如何填充List并添加{dt,accumulated,state}数据后输出JSON格式
解决方案
1. 初始化并填充intervalo列表
ArrayObjectClass中的intervalo是List<ObjectsClass>类型,默认值为null,必须先初始化才能使用,有两种常用方式:
- 手动初始化(实例创建后)
var lista = new ArrayObjectClass(); lista.intervalo = new List<ObjectsClass>(); // 初始化空列表
- 自动初始化(类构造函数中)
修改ArrayObjectClass类,在构造函数中完成列表初始化,后续创建实例时无需手动赋值:
public class ArrayObjectClass { public List<ObjectsClass> intervalo { get; set; } public ArrayObjectClass() { intervalo = new List<ObjectsClass>(); } }
2. 向列表添加数据
初始化后,可通过单个添加或批量添加的方式插入ObjectsClass实例:
- 单个添加
var singleObj = new ObjectsClass { dt = DateTime.Now, accumulated = 123.45, state = 1 }; lista.intervalo.Add(singleObj);
- 批量添加
var batchObjs = new List<ObjectsClass> { new ObjectsClass { dt = DateTime.Parse("2024-01-01"), accumulated = 50.0, state = 0 }, new ObjectsClass { dt = DateTime.Parse("2024-01-02"), accumulated = 150.0, state = 1 } }; lista.intervalo.AddRange(batchObjs);
3. 格式化JSON输出
无需先序列化再解析,直接在JsonConvert.SerializeObject中指定Formatting.Indented参数,即可生成带缩进的格式化JSON:
var formattedJson = JsonConvert.SerializeObject(lista, Newtonsoft.Json.Formatting.Indented); formattedJson.Dump();
完整可运行代码
public class ObjectsClass { public DateTime dt { get; set; } public double accumulated { get; set; } public int state { get; set; } } public class ArrayObjectClass { public List<ObjectsClass> intervalo { get; set; } public ArrayObjectClass() { intervalo = new List<ObjectsClass>(); } } void Main() { var lista = new ArrayObjectClass(); // 添加单条数据 lista.intervalo.Add(new ObjectsClass { dt = DateTime.Now, accumulated = 123.45, state = 1 }); // 批量添加数据 lista.intervalo.AddRange(new List<ObjectsClass> { new ObjectsClass { dt = new DateTime(2024, 5, 1), accumulated = 50.0, state = 0 }, new ObjectsClass { dt = new DateTime(2024, 5, 2), accumulated = 150.0, state = 1 } }); // 输出格式化JSON var formattedJson = JsonConvert.SerializeObject(lista, Newtonsoft.Json.Formatting.Indented); formattedJson.Dump(); }
注意事项
- 确保项目已引用Newtonsoft.Json(Json.NET)库,否则
JsonConvert相关API会报错。 - 若需自定义
DateTime的序列化格式,可通过JsonConverter进行配置。
内容的提问来源于stack exchange,提问作者ingezone
相关产品推荐
相关产品推荐

