程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 項目中dynamic與xml的相互轉換

項目中dynamic與xml的相互轉換

編輯:關於ASP.NET

項目中很多地方采用dynamic新特性進行開發,因此本人參看了很多關於dynamic的資料。在新的一年開始 ,記錄下自己的學習經驗。

dynamic關鍵字用於聲明一個動態對象,然後通過該動態對象去調用方法或 讀寫屬性。

(一)測試Alexandra Rusina提供的參考資料

參考 http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with- dynamicobject.aspx ,因此對該地址的博文中DynamicXMLNode類進行相應的學習與測試。測試如下:

static void Main(string[] args)
        {
            //正常運行
            RunDynamicXMLNode(true);
            //異常運行
            RunDynamicXMLNode(false);
    
           Console.ReadLine();
        }
private static void RunDynamicXMLNode(bool state)
        {
            Console.WriteLine("------RUN begin------");
            try
            {
                dynamic contact = new DynamicXMLNode("Contacts");
                contact.Name = "Patrick Hines";
                if (state)
                {
                    contact.Address = new DynamicXMLNode();
                }
                contact.Address.Street = "123 Main St";
            }
            catch (RuntimeBinderException ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine("------RUN end--------");
        }

運行後顯示結果如下:

設置斷點進行單步調試,發現TryGetMember方法中:如果當前元素XElement下沒有相應的XName的 子元素,那麼result = null;

正常運行contact.Address = new DynamicXMLNode();創建了一個新的 dynamic對象。反之,contact.Address =null;將導致RuntimeBinderException異常。

public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            XElement getNode = node.Element(binder.Name);
            if (getNode != null)
            {
                result = new DynamicXMLNode(getNode);
                return true;
            }
            else
            {
                result = null;
                return false;
            }
        }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved