1

次のコンテンツ構造を持つ umbraco Web サイトがあります: (括弧内のテキストは nodeTypeAlias です)

[root]
 - [child]
 |  - [module]
 |  |  - [submodule]
 |  |  - [submodule]
 - [child]
 |  - [module]
 |  - [module]
 |  |  - [submodule]

上記の構造を (ノードのプロパティと共に) 次の json ファイルにエクスポートしようとしています。

{
    "root": {
        "child": [
            {
                "id": "1",
                "name": "Child 1",
                "module": [
                    {
                        "id": "2",
                        "name": "Module 1",
                        "submodule": [
                            {
                                "id": "3",
                                "name": "Sub module 1"
                            },
                            {
                                "id": "4",
                                "name": "Sub module 3"
                            }
                        ]
                    }
                ]
            },
            {
                "id": "5",
                "name": "Child 5",
                "module": [
                    {
                        "id": "8",
                        "name": "Module 8"
                    },
                    {
                        "id": "6",
                        "name": "Module 6",
                        "submodule": [
                            {
                                "id": "7",
                                "name": "Sub module 7"
                            },
                            {
                                "id": "9",
                                "name": "Sub module 9"
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

これまでのところ、Linqpad で次のコードを書き留めましたが、結果は探していたものではありません。

List<Node> brands = new List<Node>()
{               
    new Node
    {
         id = 1,
        name = "Brand 1",
        type = "brand",
        children = new List<Node>
        {        
            new Node
            {
                id = 2,
                name = "Shelf 1",
                type = "shelf",
                children = new List<Node>
                {
                    new Node
                    {
                        id = 1,
                        name = "Bookcase 1",
                        type = "bookcase"
                    },
                    new Node
                    {
                        id = 2,
                        name = "Bookcase 2",
                        type = "bookcase"
                    },
                    new Node
                    {
                        id = 3,
                        name = "Bookcase 3",
                        type = "bookcase"
                    }
                }
            },
            new Node
            {
                id = 3,
                name = "Shelf 2",
                type = "shelf",
                children = new List<Node>
                {
                    new Node
                    {
                        id=1,
                        type= "module",
                        name = "Module 1"
                    },
                    new Node
                    {
                        id=2,
                        type= "pdf",
                        name = "PDF 1"
                    },
                    new Node
                    {
                        id=3,
                        type= "link",
                        name = "Link 1"
                    },
                    new Node
                    {
                        id=4,
                        type= "link",
                        name = "Link 2"
                    },
                }
            }                   
        }
    },

    new Node
    {
        id = 2,
        name = "Brand 2",
        type = "brand",
        children = new List<Node>
        {
            new Node
            {
                id = 2,
                name = "Shelf 1",
                type = "shelf",
            },
            new Node
            {
                id = 3,
                name = "Shelf 2",
                type = "shelf",
            }
        }
    }
};


Result container = new Result();

Action<List<Node>, Result> add = null;
add = (nodes, coll) =>
{
    List<Result> list = null;
    if(nodes != null && nodes.Count > 0)
    {
        nodes.Dump("nodes");
        foreach(var node in nodes)
        {
            string key = node.type;
            list = null;
            if(coll.Children.ContainsKey(key))
            {
                list = coll.Children[key];
            }
            else
            {
                list = new List<Result>();
            }
            Result r = new Result();
            r.Name = node.name;
            add(node.children, r);
            list.Add(r);
            coll.Children[key] = list;
            coll.Dump("coll");
        }
    }
};

add(brands, container);
container.Dump();
var serializer = new JavaScriptSerializer();
serializer.Serialize(container).Dump();
}

public class Result
{
    public Result()
    {
        this.Children = new Dictionary<string, List<Result>>();
        this.Properties = new Dictionary<string, string>();
    }
    public string Name {get;set;}
    public Dictionary<string, string> Properties {get;set;}
    public Dictionary<string, List<Result>> Children {get;set;}
}

public class Node
{
    public string name{get;set;}
    public string type {get;set;}
    public int id {get;set;}
    public List<Node> children{get;set;}

結果:

{
    "Name": null,
    "Properties": {},
    "Children": {
        "brand": [
            {
                "Name": "Brand 1",
                "Properties": {},
                "Children": {
                    "shelf": [
                        {
                            "Name": "Shelf 1",
                            "Properties": {},
                            "Children": {
                                "bookcase": [
                                    {
                                        "Name": "Bookcase 1",
                                        "Properties": {},
                                        "Children": {}
                                    },
                                    {
                                        "Name": "Bookcase 2",
                                        "Properties": {},
                                        "Children": {}
                                    },
                                    {
                                        "Name": "Bookcase 3",
                                        "Properties": {},
                                        "Children": {}
                                    }
                                ]
                            }
                        },
                        {
                            "Name": "Shelf 2",
                            "Properties": {},
                            "Children": {
                                "module": [
                                    {
                                        "Name": "Module 1",
                                        "Properties": {},
                                        "Children": {}
                                    }
                                ],
                                "pdf": [
                                    {
                                        "Name": "PDF 1",
                                        "Properties": {},
                                        "Children": {}
                                    }
                                ],
                                "link": [
                                    {
                                        "Name": "Link 1",
                                        "Properties": {},
                                        "Children": {}
                                    },
                                    {
                                        "Name": "Link 2",
                                        "Properties": {},
                                        "Children": {}
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            {
                "Name": "Brand 2",
                "Properties": {},
                "Children": {
                    "shelf": [
                        {
                            "Name": "Shelf 1",
                            "Properties": {},
                            "Children": {}
                        },
                        {
                            "Name": "Shelf 2",
                            "Properties": {},
                            "Children": {}
                        }
                    ]
                }
            }
        ]
    }
}

何か案が?

ありがとう。

4

1 に答える 1

0

これは XML を生成する方法とほぼ同じですが、JSON は少し異なります。Umbraco を新しいエディションのいずれかに更新した場合は、Razor を使用して、次のような方法で JSON をレンダリングします。

    @{
    var builder = new System.Text.StringBuilder();              
    foreach (var car in cars)
    {            
    builder.Append("{");
    builder.Append(Json.Encode("reg") + ":" + Json.Encode(car.Registration) + ",");
    builder.Append(Json.Encode("モデル") + ":" + car.Model);

    // ここに他の値を挿入     

    builder.Append("}");
    if (car.Registration != cars.Last().Registration)
    {
    builder.Append(",");
    }
    カウント++;
    }
    }
    @Html.Raw(builder.ToString())

もう 1 つの興味深い方法は、JSON.NET です。これは、アプリケーションでカスタム オブジェクトを使用している場合に適したオプションです。オブジェクトにデータを入力し、JSON.NET を介して渡します。詳しくはこちらをご覧ください

製品 製品 = 新しい製品();
product.Name = "アップル";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "小", "中", "大" };

文字列 json = JsonConvert.SerializeObject(製品);
//{
// "名前": "アップル",
// "有効期限": "2008-12-28T00:00:00",
// "価格": 3.99,
// "サイズ": [
// "小さな"、
// "中くらい"、
// "大きい"
// ]
//}

製品 deserializedProduct = JsonConvert.DeserializeObject(json);

このライブラリの優れた点は、文字列を作成して JSON に変換できることです。唯一の注意点は、JSON を読み取ろうとするときに JavaScript を監視する必要があることです。一重引用符 (') や二重引用符 (") などは、コードを壊す可能性があります。

文字列 json = @"{
  ""名前"": ""アップル"",
  ""有効期限"": "2008-12-28T00:00:00",
  ""価格"": 3.99,
  ""サイズ"": [
    ""小さな""、
    ""中くらい""、
    ""大きい""
  ]
}";

JObject o = JObject.Parse(json);

文字列名 = (文字列)o["名前"];
// アップル

JArray のサイズ = (JArray)o["サイズ"];

文字列最小 = (文字列)サイズ[0];
// 小さな

System.Xml 名前空間 (XmlDocument、XmlAttributes、XmlNode) を使用すると、コードが機能する可能性があります。どの Node オブジェクトを使用しているかは不明ですが、Umbraco の Node (代わりに new DynamicNode() を使用します) であると想定します。その場合、入力されたプロパティでそのように作成することはできません。その値を読み取る前に、Umbraco データベースに作成する必要があります。

うまくいけば、これで何かを続けることができるはずです。ハッピーコーディング

于 2013-04-17T22:23:06.107 に答える