第一个问题是在 C# 中使用匿名对象来描述您的图形有点困难。但是您可以改为创建一个类:
class Item {
public Int32 id { get; set; }
public String text { get; set; }
public Item[] item { get; set; }
}
然后你可以创建你的对象图:
var graph = new Item {
id = 0,
item = new[] {
new Item {
id = 1,
text = "1111"
},
new Item {
id = 2,
text = "222222",
item = new[] {
new Item {
id = 21,
text = "child"
}
}
},
new Item {
id = 3,
text = "3333"
}
}
};
您正在使用 Microsoft JSON 序列化程序,这将产生以下 JSON:
{"id":0,"text":null,"item":[{"id":1,"text":"1111","item":null},{"id":2,"text" :"222222","item":[{"id":21,"text":"child","item":null}]},{"id":3,"text":"3333","项目“:空}]}
null
由于额外的价值,这并不完全是您想要的。要解决此问题,您可以改用JSON.NET。您必须为要序列化的类添加一些额外的属性:
class Item {
public Int32 id { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public String text { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public Item[] item { get; set; }
}
然后使用以下代码执行序列化:
var jsonString = JsonConvert.SerializeObject(graph);
你得到这个 JSON:
{"id":0,"item":[{"id":1,"text":"1111"},{"id":2,"text":"222222","item":[{" id":21,"text":"child"}]},{"id":3,"text":"3333"}]}
除了您问题中的语法错误之外,这就是您所要求的。