簡體   English   中英

將xml樹轉換為json樹

[英]Converting xml tree to json tree

這是我的成功創建XML的代碼:

XDocument xdoc = new XDocument();
XElement root = new XElement("tree");
root.Add(new XAttribute("id", 0));
xdoc.Add(root);

new BuildFoldersTree(root, db);

var items = (from x in db.Items orderby x.name select new { x.name, x.id, x.parent }).ToList();
foreach (var p in items)
{
    XElement e = new XElement("item",
        new XAttribute("text", p.name),
        new XAttribute("id", p.id),
        new XAttribute("parentId", p.parent));
    XElement parent = root.XPathSelectElement(String.Format("//*[@id=\"FOLDER_{0}\"] ", p.parent.ToString()));
    if (parent != null) parent.Add(e);
 }

和:

public void BuildFoldersTree(XElement root, MyEntities db)
{
    List<Folder> folders = (from x in db.Folders orderby x.parent select x).ToList();

    for (int i = 0; i < folders.Count; i++)
    {
        int f_id = folders[i].parent;
        Folder folder = folders[i];

        XElement e = new XElement("item",
            new XAttribute("text", folder.name),
            new XAttribute("id", "FOLDER_" + folder.id.ToString()),
            new XAttribute("parentId", folder.parent));

        if (folder.parent == 0)
        {
            root.Add(e);
        }
        else
        {
            XElement parent = root.XPathSelectElement(String.Format("//*[@id=\"FOLDER_{0}\"] ", folder.parent.ToString()));
             parent.Add(e);
        }
    }
}

這是正在發生的事情:我的數據庫中有兩個表。 一個用於文件夾,另一個用於項目。 每個項目都有一個父文件夾。 該項目具有一列“父”,該列是整數,代表文件夾ID。 但是,每個文件夾也都有一個父文件夾。 該文件夾有一個名為“ parent”的列,該列是整數,代表另一個文件夾的ID。

使用該代碼,我將創建帶有文件夾的xml樹,然后將項目添加到正確的文件夾中。

先前的代碼有效。

現在,我需要為Json做相同的算法。 因此,它不會使用Xml,而應該創建一個Json樹。

我不知道如何開始。 我應該使用什么?

這是結果xml的示例:

<tree id="0">
    <item text="Folder_name" id="FOLDER_1" parentId="0">
        <item text="Other folder name" id="FOLDER_96" parentId="1">
            <item text="Third folder name" id="FOLDER_127" parentId="96">
                <item text="New folder" id="FOLDER_147" parentId="127" />
                <item text="item name" id="959" parentId="147" />
                <item text="item name sdgdfh" id="1152" parentId="147" />
            </item>
        </item>
    </item>
</tree>

JSON.NET庫中有此功能。 您可以使用JSON.NET庫中包含的JsonConvert類的SerializeXmlNode方法。 您的代碼如下所示:

var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(xmlDocument);

您可以在此處找到更多信息: http : //james.newtonking.com/projects/json/help/index.html?topic=html/ConvertingJSONandXML.htm

如果將其應用於您的示例,我們將具有以下優勢:

string xml = "<tree id=\"0\">" +
                        "<item text=\"Folder_name\" id=\"FOLDER_1\" parentId=\"0\">" +
                            "<item text=\"Other folder name\" id=\"FOLDER_96\" parentId=\"1\">" +
                                "<item text=\"Third folder name\" id=\"FOLDER_127\" parentId=\"96\">" +
                                    "<item text=\"New folder\" id=\"FOLDER_147\" parentId=\"127\" />" +
                                    "<item text=\"item name\" id=\"959\" parentId=\"147\" />" +
                                    "<item text=\"item name sdgdfh\" id=\"1152\" parentId=\"147\" />" +
                                "</item>" +
                            "</item>" +
                        "</item>" +
                    "</tree>";

var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(xmlDocument);

json變量現在包含以下數據:

{
  "tree":{
  "@id":"0",
  "item":{
     "@text":"Folder_name",
     "@id":"FOLDER_1",
     "@parentId":"0",
     "item":{
        "@text":"Other folder name",
        "@id":"FOLDER_96",
        "@parentId":"1",
        "item":{
           "@text":"Third folder name",
           "@id":"FOLDER_127",
           "@parentId":"96",
           "item":[
              {
                 "@text":"New folder",
                 "@id":"FOLDER_147",
                 "@parentId":"127"
              },
              {
                 "@text":"item name",
                 "@id":"959",
                 "@parentId":"147"
              },
              {
                 "@text":"item name sdgdfh",
                 "@id":"1152",
                 "@parentId":"147"
              }
           ]
        }
     }
  }
}

這是XML文檔的JSON表示形式。

我認為最簡單的方法是使用Json.Net並將XDocument序列化為json。

var jsonstr = JsonConvert.SerializeXNode(xdoc);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM