2013-08-19 41 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);