2013-08-16 33 views
0

我有下面的代碼,從XML文件生成動態對象:「 'System.Dynamic.ExpandoObject' 不包含一個定義 「屬性名」

C#

private static List<dynamic> GetClientObject() 
    { 
     var xDoc = XDocument.Load(new StreamReader(xmlPath + @"\client.xml")); 
     dynamic root = new ExpandoObject(); 
     XmlToDynamic.Parse(root, xDoc.Elements().First()); 
     List<dynamic> clients = new List<dynamic>(); 

     for (int i = 0; i < root.clients.client.Count; i++) 
     { 
      clients.Add(new ExpandoObject()); 
      clients[i].Id = root.clients.client[i].id; 
      clients[i].Name = root.clients.client[i].name; 
      List<string> list = new List<string>(); 

      for (int j = 0; j < root.clients.client[i].emails.email.Count; j++) 
      { 
       list.Add(root.clients.client[i].emails.email[j].ToString()); 
      } 

      clients[i].Email = string.Join(",", list); 
     } 
     return clients; 
    } 

XML

<clients> 
    <client> 
     <id>SomeId</id> 
     <name>SomeName</name> 
     <emails> 
      <email>[email protected]</email> 
      <email>[email protected]</email> 
      <email>[email protected]</email> 
     </emails> 
     <timezone>Mountain Standard Time</timezone> 
    </client> 
</clients> 

該代碼工作正常,但我總是在IntelliT中看到以下異常(多次)種族:

異常:拋出該異常: 「 'System.Dynamic.ExpandoObject' 不包含對 '客戶' 一個 定義」 (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)甲 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException被拋出: 「‘System.Dynamic.ExpandoObject’不包含 ‘客戶’的定義」

這有什麼錯我的代碼?

+0

看起來像循環條件應該是root.clients.Count,而不是root.clients.client.Count – alex

+0

請檢查更新的XML格式。 – Learner

+0

如果沒有(一塊)XML,則無法判斷「root.clients.client.Count」是否有意義。另外,stacktrace的其餘部分是否引用您自己的代碼行? –

回答

1

我收集這是使用ExpandoObject時的預期行爲。我接過一看的IntelliTrace日誌這個代碼和您所看到的例外項配對:

  • 例外:時拋出:「‘System.Dynamic.ExpandoObject’不包含一個定義「客戶」(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
  • 例外:捉住: 」 'System.Dynamic.ExpandoObject' 不包含「客戶」(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)的定義

ie exc正在被拋出然後被抓住。如果你看看調用堆棧窗口,你會發現拋出和捕獲在.NET Framework中。

順便說一句,我也不得不做出一個小的改變了代碼,使其運行: 我改變:在for循環root.clients.client.Countroot.clients.Count

相關問題