You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:18:03