如何为C#序列化的JSON列表添加根节点‘work’
问题:为序列化后的JSON添加"work"根节点
我编写了一段生成JSON字符串的C#代码:
public class Work { public string id { get; set; } public string name { get; set; } public bool status { get; set; } public bool open { get; set; } } public class Root { public IList<Work> work { get; set; } } public void Work_add(string id, string nameM) { _work.Add(new Work() { id = id, name = nameM, status = false, open = false }); } public List<Work> _work = new List<Work>(); public void Print_Json() { // ... 其他代码 string jsonE = JsonConvert.SerializeObject(_work); }
当列表填充完成并序列化后,得到的JSON结构如下:
[{"id":"1","name":"AAA","status":"false","open":"false"},{"id":"2","name":"BBB","status":"false","open":"false"},{"id":"4","name":"CCC","status":"false","open":"false"},{"id":"5","name":"DDD","status":"false","open":"false"},{"id":"6","name":"EEE","status":"false","open":"false"},{"id":"7","name":"FFF","status":"false","open":"false"},{"id":"8","name":"GGG","status":"false","open":"false"}]
我需要为该列表添加名为"work"的根节点,让最终JSON结构变为:
{"work":[{"id":"1","name":"AAA","status":"false","open":"false"},{"id":"2","name":"BBB","status":"false","open":"false"},{"id":"4","name":"CCC","status":"false","open":"false"},{"id":"5","name":"DDD","status":"false","open":"false"},{"id":"6","name":"EEE","status":"false","open":"false"},{"id":"7","name":"FFF","status":"false","open":"false"},{"id":"8","name":"GGG","status":"false","open":"false"}]}
解决方法
方法1:利用已定义的Root类
你已经提前定义了包含work属性的Root类,只需在序列化时将列表赋值给Root对象,再序列化Root对象即可:
修改Print_Json方法:
public void Print_Json() { // ... 保留原有其他代码 Root rootObj = new Root(); rootObj.work = _work; string jsonE = JsonConvert.SerializeObject(rootObj); }
方法2:使用匿名对象快速包裹
如果不想额外实例化Root类,直接用匿名对象包裹列表即可实现需求:
public void Print_Json() { // ... 保留原有其他代码 string jsonE = JsonConvert.SerializeObject(new { work = _work }); }
额外说明:当前序列化结果中布尔类型的
status和open被转为字符串"false",这并非Json.NET的默认行为,若不需要此效果,检查是否存在自定义序列化配置或转换器。
内容的提问来源于stack exchange,提问作者Michael Levit
相关产品推荐
相关产品推荐

