将xml树转换为json树

本文关键字:json 转换 xml | 更新日期: 2023-09-27 18:15:45

下面是我成功创建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);
        }
    }
}

这里是怎么回事:我的数据库中有两个表。一个用于文件夹,一个用于项目。每个项目都有一个父文件夹。该项目有一个列'parent',它是一个整数,表示文件夹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>

将xml树转换为json树

JSON中有功能。. NET库。可以使用JSON中包含的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);