2015-07-02 58 views
0

下面是一個簡單的作業調度的一個實例,它解析XML動態字符串成JSON:的Xml序列化動態字符串爲布爾

XML

<Navigations> 
     <Navigation Name="facebook" Active ="0" ></Navigation> 
</Navigations> 

C#

List<NavigationData> nds = new List<NavigationData>(); 
foreach (object cnav in (IEnumerable)c.Navigations) 
{ 
    NavigationData nd = new NavigationData(); 
    nd.Name = (string)((dynamic)cnav).Name; 
    nd.Active = XmlConvert.ToBoolean((string)((dynamic)cnav).Active); // 3 
    nds.Add(nd); 
} 
transitContent.NavigationData = JsonConvert.SerializeObject(nds); 

上述程序在第3行引發異常:

  1. 無法轉換字符串XMLConvert.ToBoolean

  2. 無法識別字符串Convert.ToBoolean

的其他類型的轉換在這種情況下possibele爲布爾值?預期的結果應該是:

JSON

[ 
    { 
     "Name": "facebook", 
     "Active": false 
    } 
] 
+0

什麼是解析XML?基本上你應該將值轉換爲一個'int',然後檢查它是否非零,但可能有比你使用的方法好得多的方法... –

+0

要檢查null,我有這個:'Active =(n.Attribute(「Active」)!= null)? n.Attribute(「Active」)。Value:string.Empty' – Sajal

+0

那麼你想要將一個缺失的屬性視爲活動或非活動?您可能需要將我的答案中的檢查更改爲「cnav.Active ==」1「' –

回答

1

嗯,是的, 「0」 是不是一個布爾有效值。這聽起來像你可能想要的東西,如:

List<NavigationData> nds = new List<NavigationData>(); 
foreach (dynamic cnav in (IEnumerable)c.Navigations) 
{ 
    NavigationData nd = new NavigationData(); 
    nd.Name = cnav.Name; 
    nd.Active = cnav.Active != "0"; 
    nds.Add(nd); 
} 
transitContent.NavigationData = JsonConvert.SerializeObject(nds); 

這是假設將公開所有屬性的字符串(如它們的執行時類型)。

+0

xml:'Active =」1「'時會發生什麼?它會將它設置爲true,我知道'nd.Active'類型是布爾型 – Sajal

+0

@ Dev-One:那麼''1「!=」0「'會返回什麼? –