2013-08-19 3 views
5

C#에서 (Newtonsoft 's) JSON.Net 라이브러리를 사용하고 있으며 기본 XML 변환의 단일 부분을 사용자 정의하려고합니다. 예를 들어JSON.Net을 사용하여 사용자 정의 JSON에서 XML로 변환

, 나는 다음과 같은 JSON 문자열이 있다고 가정보다, 배열의 XML 변환을 변경하고자한다면 : 나는 JSON.Net의 기본 변환기를 사용하여 XML로 변환하는 경우

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

, 내가 얻을 :

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

은 어떻게 든 기존 걸릴 수 있습니다 :

<object> 
    <a>d</a> 
    <a>e</a> 
    <a>f</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); 
} 

누군가가 할 수있는 것을 알고 있나요 (I 닷넷 2.0을 사용하고 있습니다) 그래서 나는의 정신에의 변환 함수를 재정의하는 데 사용할 수있는 클래스를 찾고 있어요 도움?

+0

XmlNodeConverter 클래스에서 필요한 것을 재정의 할 수있는 방법이 없습니다. JsonTextWriter의 상속자를 만들어 XmlNodeConverter에 전달해야 할 가능성이 높습니다. – Brannon

답변

0

내부적으로 Json.Net은 XmlNodeConverter이라는 특수한 JsonConverter을 사용하여 JSON에서 XML로 또는 그 반대로 변환합니다. 이 변환기는 그대로 확장 성이 좋지는 않지만, XmlNodeConverter source code을 시작 지점으로 사용하여 사용자 지정 변환기를 만든 다음 다시 Json.Net에 연결할 수 있습니다.

XmlDocument doc = 
    JsonConvert.DeserializeObject<XmlDocument>(json, yourCustomXmlNodeConverter); 
관련 문제