1

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

ここで何が起こっているか: データベースに 2 つのテーブルがあります。1 つはフォルダ用、もう 1 つはアイテム用です。各アイテムには親フォルダーがあります。アイテムには、整数でフォルダー ID を表す列「親」があります。ただし、各フォルダーには親もあります。フォルダーには、整数で別のフォルダーの 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>
4

2 に答える 2

7

最も簡単な方法は、Json.Net を使用し XDocument を json にシリアル化することだと思います。

var jsonstr = JsonConvert.SerializeXNode(xdoc);
于 2013-05-29T08:24:27.007 に答える