C# ErrorEntity错误列表设计及JSON返回客户端方案咨询
错误存储方案选型
两种方案没有绝对的最优,完全匹配业务场景就是最合适的选择:
- 你当前按错误类型拆分独立列表的方案,适合错误类型固定、调用方需要按分类做统计、筛选、分模块展示的场景。这种方案不需要拿到全量错误后二次遍历分类,读取性能高、逻辑直观,如果你当前只有图片、表格两类错误,后续很少新增类型,这个方案完全够用。唯一的缺点是新增错误类型时需要修改ErrorEntity的属性定义,扩展性一般。
- 统一单列表存储的方案,适合错误类型迭代频繁、不需要强类型区分分类的场景。注意不要直接存纯字符串,否则会丢失错误类型信息,后续无法做分类处理,建议先定义统一的错误条目结构:
public class WordErrorItem { /// <summary> /// 错误类型,如Picture/Table/Font等 /// </summary> public string ErrorType { get; set; } /// <summary> /// 错误具体描述 /// </summary> public string Message { get; set; } } public class ErrorEntity { public List<WordErrorItem> WordDocErrors { get; set; } = new(); }
这种结构不需要频繁修改ErrorEntity类,新增错误类型只要给ErrorType传新值即可,扩展性更强。
JSON序列化实现
不管你选哪种存储结构,序列化逻辑都非常简单,.NET 生态下常用的两种序列化器都可以直接实现,注意先给列表属性做初始化,避免调用Add时触发空引用异常:
首先优化你最初定义的拆分列表实体,补全初始化逻辑:
public class ErrorEntity { public ErrorEntity() { WordPictureErrors = new List<string>(); WordTableErrors = new List<string>(); } public List<string> WordPictureErrors { get; set; } public List<string> WordTableErrors { get; set; } }
拆分列表实体序列化
方案1:使用.NET 内置System.Text.Json(无需第三方依赖,.NET Core 3.0+ 原生支持)
using System.Text.Json; // 填充错误数据 var errorEntity = new ErrorEntity(); errorEntity.WordPictureErrors.Add("Picture 1 not inline"); errorEntity.WordTableErrors.Add("Table 3 has merged cells"); // 序列化,WriteIndented参数用于输出格式化的易读JSON,生产环境可移除 string jsonResult = JsonSerializer.Serialize(errorEntity, new JsonSerializerOptions { WriteIndented = true });
序列化输出结果:
{ "WordPictureErrors": [ "Picture 1 not inline" ], "WordTableErrors": [ "Table 3 has merged cells" ] }
方案2:使用Newtonsoft.Json(传统.NET Framework项目常用,需通过NuGet安装对应包)
using Newtonsoft.Json; string jsonResult = JsonConvert.SerializeObject(errorEntity, Formatting.Indented);
输出结果和上述内置序列化器完全一致。
统一列表实体序列化
如果采用带WordErrorItem结构的统一列表存储,序列化代码不需要做任何修改,直接将实体实例传入序列化方法即可,输出结构如下:
{ "WordDocErrors": [ { "ErrorType": "Picture", "Message": "Picture 1 not inline" }, { "ErrorType": "Table", "Message": "Table 3 has merged cells" } ] }
如果你坚持用纯字符串的统一列表(不推荐,会丢失错误分类信息),序列化逻辑同样不变,输出为纯字符串数组结构即可。
小提示:如果你是在ASP.NET Core Web API项目中开发,不需要手动调用序列化方法,直接将ErrorEntity实例作为接口返回值,框架会自动完成JSON序列化并返回给客户端。
内容的提问来源于stack exchange,提问作者Coco
相关产品推荐
相关产品推荐

