2013-07-10 120 views
0

我似乎有問題,反序列化這個XML:deserialise嵌套的XML

<Parameters> 
    <AParameters>   
    </AParameters> 
    <BParameters>  
    </BParameters> 
</Parameters> 

成AParameters和BParameters水合不正確。在這種嵌套的情況下,我有什麼需要考慮的嗎?

+0

你不應該讓類爲Serializable?還有什麼是你面臨的問題,任何異常或錯誤? – srsyogesh

回答

1

當您使用JsonConvert.SerializeXmlNode(doc)你的XML文檔轉換成JSON字符串,則生成看起來像這樣JSON:

{ 
    "?xml": 
    { 
     "@version":"1.0" 
    }, 
    "Parameters": 
    { 
     "AParameters": 
     { 
      ... 
     }, 
     "BParameters": 
     { 
      ... 
     } 
    } 
} 

注意,Parameters數據不是在根,但外內目的。因此,當您嘗試將JSON直接反序列化到Parameters類時,沒有一個屬性排隊,因爲它們都進一步向下。由於JSON.Net無法將類中的字段名稱與JSON數據進行匹配,因此它只使用默認值。

要解決這個問題,你可以做兩件事之一。

1)修復您的XML到JSON轉換,以便Parameters數據位於根目錄。爲了使它工作,JSON數據需要如下所示(下圖)。說起來容易做起來難。

{ 
    "AParameters": 
    { 
     ... 
    }, 
    "BParameters": 
    { 
     ... 
    } 
} 

2)創建一個包裝類並反序列化到那個。這很容易。例如:

class Wrapper 
{ 
    public Parameters Parameters { get; set; } 
} 

然後反序列化這樣的:

Parameters p = JsonConvert.DeserializeObject<Wrapper>(jsonString).Parameters; 
+0

謝謝。是的,我認爲是這樣。 '包裝'的方法完美。謝謝! – cs0815