如何通过Newtonsoft自定义Serializer将User类转换为指定结构的JSON
问题解决方案
错误原因
- 你尝试向
JProperty类型的test变量直接添加多个子对象,违反了Newtonsoft.Json的规则:JProperty只能有唯一的对应值,不能挂载多个同级节点 - 你构建完自定义结构后,仍然将原始的User序列化得到的
o对象输出到写入器,之前构建的自定义结构完全没有用到 - 字段名大小写不匹配,目标结构要求外层键为小写的
fields,你的代码中用了大写开头的Fields
你当前的实现思路完全可行,不需要更换方向,只要修正实现逻辑即可。
修正后的自定义序列化器实现
public override void WriteJson(JsonWriter writer, User value, JsonSerializer serializer) { // 先将User对象转为JObject获取所有属性 JObject userObj = JObject.FromObject(value); // 构建fields对应的内层对象,用来存所有属性的包装结果 JObject fieldsObj = new JObject(); foreach (var prop in userObj.Properties()) { // 每个属性包装成带stringValue的结构 fieldsObj.Add(prop.Name, new JObject( new JProperty("stringValue", prop.Value) )); } // 构建最外层对象 JObject result = new JObject( new JProperty("fields", fieldsObj) ); // 将最终结果写入流 result.WriteTo(writer); }
序列化后即可输出你要求的目标JSON结构。
内容的提问来源于stack exchange,提问作者ConfusedStudent
相关产品推荐
相关产品推荐

