2013-08-19 20 views
5

Sto utilizzando la libreria JSON.Net (Newtonsoft) con C# e voglio personalizzare una singola parte della sua conversione XML predefinita.Conversione personalizzata da JSON a XML utilizzando JSON.Net

Per esempio, se volevo cambiare la conversione XML di array, che dire ho la seguente stringa JSON:

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

Se converto a XML utilizzando convertitore di default di JSON.Net, ottengo:

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

Ma, voglio che convertire in:

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

Posso in qualche modo prendere l'esistente metodo di conversione e cambiarlo un po '?

Sia XML che JSON sono strutture ad albero, che dovrebbero rendere modulari i parser. Così sto cercando una classe che posso usare per sostituire la sua funzione di conversione nello spirito di:

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); 
} 

(sto usando Net v2.0)

qualcuno sa tutto ciò che può Aiuto?

+0

Non riesco a vedere alcun modo per eseguire l'override di ciò che è necessario nella classe XmlNodeConverter. Probabilmente dovrai creare il tuo erede di JsonTextWriter e passarlo a XmlNodeConverter. – Brannon

risposta

0

All'interno, Json.Net utilizza uno speciale JsonConverter chiamato XmlNodeConverter per eseguire la conversione da JSON a XML o viceversa. Questo convertitore non sembra essere molto estendibile, ma è possibile creare il proprio convertitore personalizzato usando il XmlNodeConverter source code come punto di partenza, quindi collegarlo nuovamente a Json.Net.

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