这是我想要构建的json:
{
id: 0,
item: [{ id: 1, text: "1111"
}, {
id: 2,
text: "222222",
item: [{ id: "21", text: "child" }]
}, {
id: 3, text: "3333"
}]
}
现在我无法建造一棵树,我只能建造这样的东西:
[{"id":1,"text":"1111"},{"id":21,"text":"child"]
我正在用这段代码构建它:
var serializer = new JavaScriptSerializer();
var jsonString = serializer.Serialize(listOfPairsOfTextAndId);
但是如何在c#中构建给定的树?
答案 0 :(得分:3)
Først问题是使用匿名对象来描述你的图形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","item":null}]}
由于额外的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"}]}
除了你问题中的语法错误,这就是你要求的。
答案 1 :(得分:0)
您需要创建一些包含要序列化为该格式的数据的对象。我使用在线生成器创建了几个快速类,根据需要进行重构。
以下是课程
public class Item2
{
public string id { get; set; }
public string text { get; set; }
}
public class Item
{
public int id { get; set; }
public string text { get; set; }
public List<Item2> item { get; set; }
}
public class RootObject
{
public int id { get; set; }
public List<Item> item { get; set; }
}
您将首先创建RootObject
并根据需要设置其属性(确保初始化列表)。之后,只需对构成输出的其他类做同样的事情。
完成后,简单地序列化RootObject实例,您将获得所请求的输出。
我使用http://json2csharp.com/根据所需的JSON输出生成这些类。
答案 2 :(得分:-1)
您可以创建这样的功能
public static string GetJSON(object obj)
{
var oSerializer = new JavaScriptSerializer();
var sbJsonResults = new StringBuilder();
oSerializer.Serialize(obj, sbJsonResults);
return sbJsonResults.ToString();
}
然后调用此函数。
您可以创建要使用的表单的自定义类。
创建List<class>
,并将其传递给上述功能
它会起作用。