JSON을 XML로 변환하거나 XML을 JSON으로 변환하는 방법은 무엇입니까?


282

Json.NET을 사용하여 JSON 형식의 문자열을 객체로 또는 그 반대로 변환하기 시작했습니다. Json.NET 프레임 워크에서 확실하지 않습니다 .JSON의 문자열을 XML 형식으로 또는 그 반대로 변환 할 수 있습니까?


StaxMan이 말했듯이 ex가 있다면 참고하십시오. 요소 노드의 공간은 xml에 의해 무시됩니다. 예를 들어. "학생 ID": 11000은 속성 이름에 xml 결과 공간의 bcuz가되지 않습니다. xml은 요소 노드 내에 공백이 허용되지 않습니다.
Daniel B

답변:


424

예. 이 정확한 목적을위한 헬퍼 메소드를 포함하는 JsonConvert 클래스 사용 :

// To convert an XML node contained in string xml into a JSON string   
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

// To convert JSON text contained in string json into an XML node
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);

여기 문서 : Json.NET을 사용하여 JSON과 XML 간 변환


3
이 수업을 찾을 수 없습니다. NewtonSoft Json.net 3.5를 사용합니다.
David.Chu.ca 09 년

3
이 기능은 JSON.NET 3.5의 Newtonsoft.Json.Converters.XmlNodeConverter 클래스로 이동 한 것으로 보입니다 : james.newtonking.com/projects/json/help/html/…
David Brown

3
참고로, 여기에는 잠재적 인 문제가 있습니다. xml 노드의 배열을 json으로 바꿀 때 json에서 배열을 만들고있었습니다. 그러나 카운트가 1 인 xml 노드의 배열을 실행할 때 json 변환은 더 이상 배열을 형식화하지 않습니다. 단일 요소를 가진 xml 배열은 번역에서 손실됩니다.
Levitikon

3
놀랍게도, 이것은 XML과 JSON 사이의 임피던스이며, (IMO) 그 둘 사이 를 직접 변환 하는 것이 좋지 않은 이유 입니다. 그러나, 여기에 (내 대답에 대한
공감 률

7
@ StaxMan : 모든 사람들이 JSON 형식으로 XML 문서를 나타내는 표준화 된 방법이 없다는 데 동의 할 수 있다고 생각합니다. 귀하의 답변은 실제로 질문에 답변하지 않았기 때문에 다운 보트되었을 수 있습니다. OP는 전환 을 해야하는지 묻지 않고 이미 사용중인 도구를 사용하여 전환을 수행 수 있는지 묻고 있었습니다 .
David Brown

46

예, 할 는 있지만 변환 할 때 역설을 알고 적절하게 처리하십시오. 모든 인터페이스 가능성을 자동으로 준수 할 수는 없으며 변환 제어에 대한 기본 제공 지원이 제한되어 있습니다. 많은 JSON 구조와 값을 자동으로 변환 할 수 없습니다. Newtonsoft JSON 라이브러리 및 MS XML 라이브러리에서 기본 설정을 사용하고 있으므로 마일리지가 다를 수 있습니다.

XML-> JSON

  1. 모든 데이터는 (예를 들어, 당신은 항상 얻을 것이다 문자열 데이터가된다 "false"를 하지 거짓 또는 "0" 하지 0 분명히 자바 스크립트는 어떤 경우에 다르게이 취급).
  2. 하위 요소는 둘 이상의 XML 하위 요소가 있는지 여부에 따라 {}중첩 오브젝트 또는 중첩 배열 이 될 수 있습니다 [ {} {} ...]. JavaScript 등에서이 두 가지를 다르게 사용할 것입니다. 동일한 스키마를 따르는 XML의 다른 예제는 실제로 이런 방식으로 다른 JSON 구조를 생성 할 수 있습니다. json : Array = 'true' 속성을 요소에 추가하여 일부 (전부는 아님) 경우에이 문제를 해결할 수 있습니다.
  3. 귀하의 XML은 상당히 잘 구성되어 있어야하며 W3C 표준을 완벽하게 준수 할 필요는 없지만 1. 루트 요소가 있어야하며 2. 숫자로 요소 이름을 시작할 수 없습니다. 강제 XML 표준 중 두 가지입니다. Newtonsoft 및 MS 라이브러리를 사용할 때 발견했습니다.
  4. 이전 버전에서는 Blank 요소가 JSON으로 변환되지 않습니다. 그들은 무시됩니다. 빈 요소는 "요소" 가되지 않습니다 .

새로운 업데이트로 변경되었습니다 (Jon Story에게 알려 주셔서 감사합니다) : https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm

JSON-> XML

  1. 루트 XML 요소로 변환 할 최상위 레벨 오브젝트가 필요하거나 구문 분석기가 실패합니다.
  2. 객체 이름은 요소로 변환 할 수 없으므로 숫자로 시작할 수 없지만 (XML은 기술적으로 이보다 훨씬 엄격합니다.) 다른 요소 명명 규칙을 위반하면 '피할 수 있습니다'.

당신이 알아 차린 다른 문제들에 대해 언급 해 주시기 바랍니다. 나는 앞뒤로 변환 할 때 줄을 준비하고 청소하기위한 나만의 맞춤형 루틴을 개발했습니다. 귀하의 상황은 준비 / 정리를 요구하거나 요구하지 않을 수 있습니다. StaxMan이 언급했듯이, 실제로 상황에 따라 객체를 변환해야 할 수도 있습니다 ... 이것은 위에서 언급 한주의 사항을 처리하기 위해 적절한 인터페이스와 많은 사례 진술 등을 수반 할 수 있습니다.


이! 내 짧은 (그리고 어느 시점에서 크게 하향 투표 된) 답변의 기초가 무엇인지에 대한 정교한 설명-직접 맹목적으로 직접 전환하면 많은 함정이 있습니다. 특정 사용에 대한 문제를 차단하지는 않지만 다른 사람들에게는 매우 불쾌 할 수 있습니다.
StaxMan

1
XML의 # 4-> JSON : NullValueHandling 속성을 사용하여 null 값을 명시 적으로 포함하도록 지정할 수 있습니다. – newtonsoft.com/json/help/html/…
Jon Story

이 주석에서 문제에 대한 설명은 JSON을 XML로 또는 그 반대로 변환하는 모든 알고리즘 구현에 적용됩니다. 일단 완벽한 양방향 충실도를 동시에 달성 수 없으며 동시에 에테르 "파티"또는 "제한된"(예측 된 스키마 / 포맷) 입력 및 출력을 달성 수 없다고 인정합니다 . -일반적인 경우.
DALDEI

33

.NET Framework를 사용하여 이러한 변환을 수행 할 수도 있습니다.

JSON에서 XML로 : System.Runtime.Serialization.Json 을 사용하여

var xml = XDocument.Load(JsonReaderWriterFactory.CreateJsonReader(
    Encoding.ASCII.GetBytes(jsonString), new XmlDictionaryReaderQuotas()));

XML에서 JSON으로 : System.Web.Script.Serialization 사용

var json = new JavaScriptSerializer().Serialize(GetXmlData(XElement.Parse(xmlString)));

private static Dictionary<string, object> GetXmlData(XElement xml)
{
    var attr = xml.Attributes().ToDictionary(d => d.Name.LocalName, d => (object)d.Value);
    if (xml.HasElements) attr.Add("_value", xml.Elements().Select(e => GetXmlData(e)));
    else if (!xml.IsEmpty) attr.Add("_value", xml.Value);

    return new Dictionary<string, object> { { xml.Name.LocalName, attr } };
}

GetXmlData에 오류가 있습니다. '현재 컨텍스트에'GetXmlData '라는 이름이 없습니다.'누락 된 사용 지시문이 있습니까?
TimSmith-Aardwolf

4
@ TimSmith-Aardwolf, 여기 필요한 모든 코드가 있습니다. 대한 System.Web.Script.Serialization를 사용하여 추가 할 필요가 System.Web.Extensions를 참조에 조립.
Termininja

@Termininja, JSON에서 XML로 유형을 지정하는 방법, 제거하는 방법?
크래커

@Termininja, 완벽합니다, 감사합니다.
크래커

30

나는 그러한 변환에 포인트가 있는지 확실하지 않습니다 (예, 많은 사람들이하지만 대부분 둥근 구멍을 통해 사각형 페그를 강제합니다)-구조적 임피던스 불일치가 있으며 변환이 손실됩니다. 따라서 이러한 형식 간 변환을 권장하지 않습니다.

그러나 그렇게하면 먼저 json에서 객체로 변환 한 다음 객체에서 xml로 변환하십시오 (역방향의 경우도 마찬가지). 직접 변환을 수행하면 추악한 출력, 정보 손실 또는 둘 다가 발생할 수 있습니다.


1
귀하의 답변이 박살 났지만 여기에 와서 기쁩니다. 변환을하고 싶고 c # 중간 객체 건너 뛰기를 고려하고 있었지만 지금은 확실하지 않습니다. 그렇지 않으면 XSD를 기반으로 c # 객체를 생성해야하며 변환 목적으로 만 사용되므로 낭비 된 레이어 (및 노력)처럼 보였습니다. 손실이 얼마나 많은지에 대한 예나 자세한 내용이 있다면보기에 좋을 것입니다.
CRice

이것이 다운 피트 된 이유를 모릅니다. 현재 우리 제품의 여러 XML <-> JSON 변환 단계와 관련된 많은 버그를 수정하고 있습니다. 대부분 JSON에서 XML로 변환 할 때 숫자 유형이 손실됩니다.
rikkit

어려운 진실, 유용한 답변.
FailedUnitTest는

@CRice 년이 너무 늦었지만 전송 객체가 있으면 XML 스키마가 어느 정도 보존됩니다. 예를 들어, Levitikon의해 제기 된 것처럼 단일 요소 배열로 XML 문서를 변환하려고하면 배열 유형의 전송 객체에서 오지 않으면 JSON 변환은 배열임을 알 수 없습니다.
jpaugh

1
Newtonsoft.JSON의 XmlNodeConverter는설정 옵션 JSON에 XML의 뒷면에 JSON에서 전송할 때이 문제를 방지하기 위해,하지만 원래의 형식은 XML입니다 그것은 경우를 잡을 수 없어
jpaugh

27

David Brown의 답변에 감사드립니다 . 필자의 JSON.Net 3.5의 경우 변환 메소드는 JsonConvert 정적 클래스 아래에 있습니다.

XmlNode myXmlNode = JsonConvert.DeserializeXmlNode(myJsonString); // is node not note
// or .DeserilizeXmlNode(myJsonString, "root"); // if myJsonString does not have a root
string jsonString = JsonConvert.SerializeXmlNode(myXmlNode);

4
데이터가 배열 인 경우 다음과 같이해야합니다. JsonConvert.DeserializeXmlNode ( "{\"Row \ ":"+ json + "}", "root"). ToXmlString () 그렇지 않으면 "XmlNodeConverter가 표시됩니다. "개체로 시작하는 JSON 만 변환 할 수 있습니다." 예외.
Mitchell Skurnik

예, 숫자로 시작할 수 없습니다. JsonConvert.DeserializeXmlNode ( "{\"1Row \ ":"+ json + "}", "root"). ToXmlString () 실패
DaFi4

위의 답변과 @mitchell 의견은 저를 도와주세요 .. thank
Ajay2707

8

외부 어셈블리 / 프로젝트를 사용하지 않기 위해 수용 된 솔루션에 대한 대체 코드를 찾기 위해 오랫동안 검색했습니다. DynamicJson 프로젝트 의 소스 코드 덕분에 다음을 생각해 냈습니다 .

public XmlDocument JsonToXML(string json)
{
    XmlDocument doc = new XmlDocument();

    using (var reader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json), XmlDictionaryReaderQuotas.Max))
    {
        XElement xml = XElement.Load(reader);
        doc.LoadXml(xml.ToString());
    }

    return doc;
}

참고 : xPath 목적으로 XElement가 아닌 XmlDocument를 원했습니다. 또한이 코드는 분명히 JSON에서 XML로만 진행되며 그 반대의 다양한 방법이 있습니다.


1
최근에 SQLCLR 에서이 작업을 수행해야했고 종속성을 취할 수 없었기 때문에 총알을 물고이 json-to-xml 변환 루틴 을 작성했습니다. 놀랍게도 간단하고 약 20 줄의 코드였습니다.
gordy

XML에서 typr을 제거하는 방법?
크래커

6

다음은 XML을 json으로 변환하는 전체 C # 코드입니다.

public static class JSon
{
public static string XmlToJSON(string xml)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);

    return XmlToJSON(doc);
}
public static string XmlToJSON(XmlDocument xmlDoc)
{
    StringBuilder sbJSON = new StringBuilder();
    sbJSON.Append("{ ");
    XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true);
    sbJSON.Append("}");
    return sbJSON.ToString();
}

//  XmlToJSONnode:  Output an XmlElement, possibly as part of a higher array
private static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)
{
    if (showNodeName)
        sbJSON.Append("\"" + SafeJSON(node.Name) + "\": ");
    sbJSON.Append("{");
    // Build a sorted list of key-value pairs
    //  where   key is case-sensitive nodeName
    //          value is an ArrayList of string or XmlElement
    //  so that we know whether the nodeName is an array or not.
    SortedList<string, object> childNodeNames = new SortedList<string, object>();

    //  Add in all node attributes
    if (node.Attributes != null)
        foreach (XmlAttribute attr in node.Attributes)
            StoreChildNode(childNodeNames, attr.Name, attr.InnerText);

    //  Add in all nodes
    foreach (XmlNode cnode in node.ChildNodes)
    {
        if (cnode is XmlText)
            StoreChildNode(childNodeNames, "value", cnode.InnerText);
        else if (cnode is XmlElement)
            StoreChildNode(childNodeNames, cnode.Name, cnode);
    }

    // Now output all stored info
    foreach (string childname in childNodeNames.Keys)
    {
        List<object> alChild = (List<object>)childNodeNames[childname];
        if (alChild.Count == 1)
            OutputNode(childname, alChild[0], sbJSON, true);
        else
        {
            sbJSON.Append(" \"" + SafeJSON(childname) + "\": [ ");
            foreach (object Child in alChild)
                OutputNode(childname, Child, sbJSON, false);
            sbJSON.Remove(sbJSON.Length - 2, 2);
            sbJSON.Append(" ], ");
        }
    }
    sbJSON.Remove(sbJSON.Length - 2, 2);
    sbJSON.Append(" }");
}

//  StoreChildNode: Store data associated with each nodeName
//                  so that we know whether the nodeName is an array or not.
private static void StoreChildNode(SortedList<string, object> childNodeNames, string nodeName, object nodeValue)
{
    // Pre-process contraction of XmlElement-s
    if (nodeValue is XmlElement)
    {
        // Convert  <aa></aa> into "aa":null
        //          <aa>xx</aa> into "aa":"xx"
        XmlNode cnode = (XmlNode)nodeValue;
        if (cnode.Attributes.Count == 0)
        {
            XmlNodeList children = cnode.ChildNodes;
            if (children.Count == 0)
                nodeValue = null;
            else if (children.Count == 1 && (children[0] is XmlText))
                nodeValue = ((XmlText)(children[0])).InnerText;
        }
    }
    // Add nodeValue to ArrayList associated with each nodeName
    // If nodeName doesn't exist then add it
    List<object> ValuesAL;

    if (childNodeNames.ContainsKey(nodeName))
    {
        ValuesAL = (List<object>)childNodeNames[nodeName];
    }
    else
    {
        ValuesAL = new List<object>();
        childNodeNames[nodeName] = ValuesAL;
    }
    ValuesAL.Add(nodeValue);
}

private static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)
{
    if (alChild == null)
    {
        if (showNodeName)
            sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
        sbJSON.Append("null");
    }
    else if (alChild is string)
    {
        if (showNodeName)
            sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
        string sChild = (string)alChild;
        sChild = sChild.Trim();
        sbJSON.Append("\"" + SafeJSON(sChild) + "\"");
    }
    else
        XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);
    sbJSON.Append(", ");
}

// Make a string safe for JSON
private static string SafeJSON(string sIn)
{
    StringBuilder sbOut = new StringBuilder(sIn.Length);
    foreach (char ch in sIn)
    {
        if (Char.IsControl(ch) || ch == '\'')
        {
            int ich = (int)ch;
            sbOut.Append(@"\u" + ich.ToString("x4"));
            continue;
        }
        else if (ch == '\"' || ch == '\\' || ch == '/')
        {
            sbOut.Append('\\');
        }
        sbOut.Append(ch);
    }
    return sbOut.ToString();
 }
}

주어진 XML 문자열을 JSON으로 변환하려면 아래와 같이 XmlToJSON () 함수를 호출하면됩니다.

string xml = "<menu id=\"file\" value=\"File\"> " +
              "<popup>" +
                "<menuitem value=\"New\" onclick=\"CreateNewDoc()\" />" +
                "<menuitem value=\"Open\" onclick=\"OpenDoc()\" />" +
                "<menuitem value=\"Close\" onclick=\"CloseDoc()\" />" +
              "</popup>" +
            "</menu>";

string json = JSON.XmlToJSON(xml);
// json = { "menu": {"id": "file", "popup": { "menuitem": [ {"onclick": "CreateNewDoc()", "value": "New" }, {"onclick": "OpenDoc()", "value": "Open" }, {"onclick": "CloseDoc()", "value": "Close" } ] }, "value": "File" }}

3

이 기능을 사용해보십시오. 나는 방금 그것을 썼고 그것을 테스트 할 기회가 많지 않았지만 나의 예비 테스트는 유망합니다.

public static XmlDocument JsonToXml(string json)
{
    XmlNode newNode = null;
    XmlNode appendToNode = null;
    XmlDocument returnXmlDoc = new XmlDocument();
    returnXmlDoc.LoadXml("<Document />");
    XmlNode rootNode = returnXmlDoc.SelectSingleNode("Document");
    appendToNode = rootNode;

    string[] arrElementData;
    string[] arrElements = json.Split('\r');
    foreach (string element in arrElements)
    {
        string processElement = element.Replace("\r", "").Replace("\n", "").Replace("\t", "").Trim();
        if ((processElement.IndexOf("}") > -1 || processElement.IndexOf("]") > -1) && appendToNode != rootNode)
        {
            appendToNode = appendToNode.ParentNode;
        }
        else if (processElement.IndexOf("[") > -1)
        {
            processElement = processElement.Replace(":", "").Replace("[", "").Replace("\"", "").Trim();
            newNode = returnXmlDoc.CreateElement(processElement);
            appendToNode.AppendChild(newNode);
            appendToNode = newNode;
        }
        else if (processElement.IndexOf("{") > -1 && processElement.IndexOf(":") > -1)
        {
            processElement = processElement.Replace(":", "").Replace("{", "").Replace("\"", "").Trim();
            newNode = returnXmlDoc.CreateElement(processElement);
            appendToNode.AppendChild(newNode);
            appendToNode = newNode;
        }
        else
        {
            if (processElement.IndexOf(":") > -1)
            {
                arrElementData = processElement.Replace(": \"", ":").Replace("\",", "").Replace("\"", "").Split(':');
                newNode = returnXmlDoc.CreateElement(arrElementData[0]);
                for (int i = 1; i < arrElementData.Length; i++)
                {
                    newNode.InnerText += arrElementData[i];
                }

                appendToNode.AppendChild(newNode);
            }
        }
    }

    return returnXmlDoc;
}

2

다음은 XmlNode를 (재귀 적으로) 해시 테이블로 변환하고 동일한 자식의 여러 인스턴스를 배열 (ArrayList)로 그룹화하는 간단한 스 니펫입니다. Hashtable은 일반적으로 대부분의 JSON 라이브러리에서 JSON으로 변환하도록 허용됩니다.

protected object convert(XmlNode root){
    Hashtable obj = new Hashtable();
    for(int i=0,n=root.ChildNodes.Count;i<n;i++){
        object result = null;
        XmlNode current = root.ChildNodes.Item(i);

        if(current.NodeType != XmlNodeType.Text)
            result = convert(current);
        else{
            int resultInt;
            double resultFloat;
            bool resultBoolean;
            if(Int32.TryParse(current.Value, out resultInt)) return resultInt;
            if(Double.TryParse(current.Value, out resultFloat)) return resultFloat;
            if(Boolean.TryParse(current.Value, out resultBoolean)) return resultBoolean;
            return current.Value;
        }

        if(obj[current.Name] == null)
            obj[current.Name] = result;
        else if(obj[current.Name].GetType().Equals(typeof(ArrayList)))
            ((ArrayList)obj[current.Name]).Add(result);
        else{
            ArrayList collision = new ArrayList();
            collision.Add(obj[current.Name]);
            collision.Add(result);
            obj[current.Name] = collision;
        }
    }

    return obj;
}

1

Cinchoo ETL- 몇 줄의 코드만으로 Xml을 JSON으로 쉽게 변환 할 수있는 오픈 소스 라이브러리

Xml-> JSON :

using (var p = new ChoXmlReader("sample.xml"))
{
    using (var w = new ChoJSONWriter("sample.json"))
    {
        w.Write(p);
    }
}

JSON-> Xml :

using (var p = new ChoJsonReader("sample.json"))
{
    using (var w = new ChoXmlWriter("sample.xml"))
    {
        w.Write(p);
    }
}

추가 도움이 필요하면 CodeProject 기사를 확인하십시오.

면책 조항 : 나는이 도서관의 저자입니다.


0

나는 David Brown의 말처럼했지만 다음과 같은 예외가 있습니다.

$exception {"There are multiple root elements. Line , position ."} System.Xml.XmlException

한 가지 해결책은 루트 요소로 XML 파일을 수정하는 것이지만 항상 필요한 것은 아니며 XML 스트림에서도 가능하지 않을 수도 있습니다. 내 솔루션은 다음과 같습니다.

var path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\App_Data"));
var directoryInfo = new DirectoryInfo(path);
var fileInfos = directoryInfo.GetFiles("*.xml");

foreach (var fileInfo in fileInfos)
{
    XmlDocument doc = new XmlDocument();
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ConformanceLevel = ConformanceLevel.Fragment;

    using (XmlReader reader = XmlReader.Create(fileInfo.FullName, settings))
    {
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element)
            {
                var node = doc.ReadNode(reader);
                string json = JsonConvert.SerializeXmlNode(node);
            }
        }
    }
}

오류를 생성하는 예제 XML :

<parent>
    <child>
        Text
    </child>
</parent>
<parent>
    <child>
        <grandchild>
            Text
        </grandchild>
        <grandchild>
            Text
        </grandchild>
    </child>
    <child>
        Text
    </child>
</parent>

1
예제 XML은 단일 루트 노드가 없으므로 XML 문서가 아닙니다. 그러나 그것은 XML 조각 일 수 있습니다.
Robert McKee 19 :

0

아래 방법을 사용하여 JSON을 XML로 변환했습니다.

List <Item> items;
public void LoadJsonAndReadToXML() {
  using(StreamReader r = new StreamReader(@ "E:\Json\overiddenhotelranks.json")) {
    string json = r.ReadToEnd();
    items = JsonConvert.DeserializeObject <List<Item>> (json);
    ReadToXML();
  }
}

public void ReadToXML() {
  try {
    var xEle = new XElement("Items",
      from item in items select new XElement("Item",
        new XElement("mhid", item.mhid),
        new XElement("hotelName", item.hotelName),
        new XElement("destination", item.destination),
        new XElement("destinationID", item.destinationID),
        new XElement("rank", item.rank),
        new XElement("toDisplayOnFod", item.toDisplayOnFod),
        new XElement("comment", item.comment),
        new XElement("Destinationcode", item.Destinationcode),
        new XElement("LoadDate", item.LoadDate)
      ));

    xEle.Save("E:\\employees.xml");
    Console.WriteLine("Converted to XML");
  } catch (Exception ex) {
    Console.WriteLine(ex.Message);
  }
  Console.ReadLine();
}

요소라는 클래스를 사용하여 요소를 나타 냈습니다.

public class Item {
  public int mhid { get; set; }
  public string hotelName { get; set; }
  public string destination { get; set; }
  public int destinationID { get; set; }
  public int rank { get; set; }
  public int toDisplayOnFod { get; set; }
  public string comment { get; set; }
  public string Destinationcode { get; set; }
  public string LoadDate { get; set; }
}

효과가있다....


0

JSON문자열을 변환하려면 다음 을 XML시도하십시오.

    public string JsonToXML(string json)
    {
        XDocument xmlDoc = new XDocument(new XDeclaration("1.0", "utf-8", ""));
        XElement root = new XElement("Root");
        root.Name = "Result";

        var dataTable = JsonConvert.DeserializeObject<DataTable>(json);
        root.Add(
                 from row in dataTable.AsEnumerable()
                 select new XElement("Record",
                                     from column in dataTable.Columns.Cast<DataColumn>()
                                     select new XElement(column.ColumnName, row[column])
                                    )
               );


        xmlDoc.Add(root);
        return xmlDoc.ToString();
    }

변환 XMLJSON시도해보십시오.

    public string XmlToJson(string xml)
    {
       XmlDocument doc = new XmlDocument();
       doc.LoadXml(xml);

       string jsonText = JsonConvert.SerializeXmlNode(doc);
       return jsonText;
     }

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.