2013-08-19 17 views
5

Używam biblioteki Jtons.Net (Newtonsoft) z C#, i chcę dostosować pojedynczą część jego domyślnej konwersji XML.Niestandardowa konwersja JSON do XML za pomocą JSON.Net

Na przykład, gdybym chciał zmienić konwersję XML tablic, niż powiedzieć, mam następujący ciąg JSON:

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

Jeśli przekonwertować go do XML przy użyciu domyślnego konwerter Json.NET za otrzymuję:

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

Ale chcę go przekonwertować do:

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

mogę jakoś wziąć istniejący sposób konwersji i trochę go zmienić?

Zarówno XML, jak i JSON są strukturami opartymi na drzewach, co powinno uczynić ich parsery modułowymi. Więc szukam klasy, które mogę wykorzystać, aby zastąpić swoją funkcję konwersji w duchu:

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

(używam .NET v2.0)

Czy ktoś wie wszystko, co może Wsparcie?

+0

Nie widzę żadnego sposobu na zastąpienie tego, czego potrzebujesz w klasie XmlNodeConverter. Prawdopodobnie będziesz musiał stworzyć własnego dziedzica JsonTextWriter i przekazać go do XmlNodeConverter. – Brannon

Odpowiedz

0

Wewnętrznie, Json.Net używa specjalnego JsonConverter o nazwie XmlNodeConverter do konwersji z JSON na XML lub odwrotnie. Ten konwerter nie wydaje się być bardzo rozszerzalny, ale można utworzyć własny niestandardowy konwerter, korzystając z XmlNodeConverter source code jako punktu początkowego, a następnie podłączyć go ponownie do Json.Net.

XmlDocument doc = 
    JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter); 
Powiązane problemy