将dotnet对象序列化为json作为jproperty,其中key是对象的属性并且值为整个对象

时间:2015-04-09 10:38:05

标签: c# .net json serialization

我需要创建这个json,我知道我可以使用字符串操作,但我想使用类来实现:

{  
    "articles":{  
        "3":{  
            "id":"3",
            "label":"Preambolo",
            "leaf":true,
            "pathArray":[  
                {  
                    "id":"1",
                    "label":"TITOLO I Disposizioni Generali"
                },
                {  
                    "id":"2",
                    "label":"Capo I Definizioni e classificazioni generali"
                }
            ],
            "path":"TITOLO I Disposizioni Generali::Capo I Definizioni e classificazioni generali"
        }
    }
}

这是我的代码:

public class PathArrayItem {
    public string id {
        get;
        set;
    }
    public string label {
        get;
        set;
    }

    public PathArrayItem(string id, string label) {
        this.id = id;
        this.label = label;
    }
}

public class item {
    public string id {
        get;
        set;
    }
    public string label {
        get;
        set;
    }
    public bool leaf {
        get;
        set;
    }
    public List < PathArrayItem > pathArray {
        get;
        set;
    }
    public string path {
        get;
        set;
    }
}

void test() {
    List < item > art = new List < item > ();
    item item_3 = new item();
    item_3.id = "3";
    item_3.label = "Preambolo";
    item_3.leaf = true;
    item_3.pathArray = new List < PathArrayItem > ();
    item_3.pathArray.Add(new PathArrayItem("1", "TITOLO I Disposizioni Generali"));
    item_3.pathArray.Add(new PathArrayItem("2", "Capo I Definizioni e classificazioni generali"));
    item_3.path = "TITOLO I Disposizioni Generali::Capo I Definizioni e classificazioni generali";
    art.Add(item_3);

    txtOutput.Text = Newtonsoft.Json.JsonConvert.SerializeObject(new {
        articles = art
    });
}

这是我的代码产生的输出:

{  
    "articles":[  
        {  
            "id":"3",
            "label":"Preambolo",
            "leaf":true,
            "pathArray":[  
                {  
                    "id":"1",
                    "label":"TITOLO I Disposizioni Generali"
                },
                {  
                    "id":"2",
                    "label":"Capo I Definizioni e classificazioni generali"
                }
            ],
            "path":"TITOLO I Disposizioni Generali::Capo I Definizioni e classificazioni generali"
        }
    ]
}

这就是我需要改变的地方:

  • 文章必须不是数组。
  • 每个项目都需要序列化为jproperty,其中id是键,整个对象是值。

1 个答案:

答案 0 :(得分:1)

您可以使用List<item>

而不是Dictionary<int, item>
Dictionary<int, item> art = new Dictionary<int, item>();
item item_3 = new item();
item_3.id = "3";
item_3.label = "Preambolo";
item_3.leaf = true;
item_3.pathArray = new List<PathArrayItem>();
item_3.pathArray.Add(new PathArrayItem("1", "TITOLO I Disposizioni Generali"));
item_3.pathArray.Add(new PathArrayItem("2", "Capo I Definizioni e classificazioni generali"));
item_3.path = "TITOLO I Disposizioni Generali::Capo I Definizioni e classificazioni generali";

art.Add(3, item_3);

哪个会给你

{"articles":{"3":{"id":"3","label":"Preambolo","leaf":true,"pathArray":[{"id":"1","label":"TITOLO I Disposizioni Generali"},{"id":"2","label":"Capo I Definizioni e classificazioni generali"}],"path":"TITOLO I Disposizioni Generali::Capo I Definizioni e classificazioni generali"}}}