2013-08-19 40 views
5

我正在使用(Newtonsoft的)JSON.Net庫與C#,我想定製其默認的XML轉換的單一部分。自定義JSON到XML轉換使用JSON.Net

例如,如果我想改變陣列的XML轉換,不如說我有以下的JSON字符串:

{ 
    "object": 
    { 
     "a": 
     { 
      [ 
       "d", 
       "e", 
       "f" 
      ] 
     } 
    } 
} 

如果我使用JSON.Net的默認轉換器將其轉換爲XML,我得到:

<object> 
    <a>d</a> 
    <a>e</a> 
    <a>f</a> 
</object> 

但是,我想它轉換爲:

<object> 
    <a special:type="array"> 
     <element>d</element> 
     <element>e</element> 
     <element>f</element> 
    </a> 
</object> 

我可以以某種方式利用現有轉換的方法並改變一下?

XML和JSON都是基於樹的結構,應該使它們的分析器模塊化。於是我找了,我可以用它來覆蓋它的轉換函數的精神類:

protected override XmlNode ToXmlNode(JsonNode jNode) 
{ 
    if (jNode.Type == JsonType.Array) 
    { 
     XmlNode xNode = this.XDocument.CreateElement(jNode.Name) 
     foreach (JsonNode jSub in jNode.Children) 
     { 
      var newJSub = jSub.Clone(); 
      newJSub.Name = "element"; 
      xNode.AppendChild(this.ToXmlNode(newJSub)); 
     } 
     return xNode; 
    } 
    else 
     return base.ToXmlNode(jNode); 
} 

(我使用的.Net 2.0)

有誰知道什麼可以幫幫我?

+0

我看不到任何方式來重寫您需要在XmlNodeConverter類中。您可能需要製作自己的JsonTextWriter繼承器並將其傳遞給XmlNodeConverter。 – Brannon

回答

0

在內部,Json.Net使用特殊的JsonConverter,調用XmlNodeConverter來執行從JSON到XML的轉換,反之亦然。這個轉換器看起來並不是很具有可擴展性,但您可以使用XmlNodeConverter source code作爲起點創建自己的自定義轉換器,然後將其插回到Json.Net中。

XmlDocument doc = 
    JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter);