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

如何将数组反序列化为包装器对象?Json.NET是否需自定义转换器?

不需要自定义JsonConverter!用隐式转换就能搞定

你完全不用费劲写自定义Converter,Json.NET本身就支持利用隐式类型转换来处理这种场景——刚好你的ArrayWrapper已经定义了从int[]到自身的隐式转换,只需要简单调整代码就能让ArrayWrapper[] Array直接生效。

具体修改步骤:

  • 删掉原来的Array_和只读的Array属性
  • 直接给ArrayWrapper[] Array加上[JsonProperty("array")]特性,让它对应API返回的字段

修改后的完整代码如下:

public class Obj { 
    [JsonProperty("array")] 
    public ArrayWrapper[] Array { get; set; } // 现在可以直接反序列化了!
} 

public struct ArrayWrapper { 
    private readonly int[] array; 
    public int Item0 => array[0]; 
    public int Item1 => array[1]; 

    public ArrayWrapper(int[] array) { 
        this.array = array; 
    } 

    public static implicit operator ArrayWrapper(int[] array) { 
        return new ArrayWrapper(array); 
    } 

    // 可选:如果需要把Obj序列化回JSON格式,添加反向隐式转换
    public static implicit operator int[] (ArrayWrapper wrapper) { 
        return wrapper.array; 
    } 
}

为什么这能生效?

Json.NET在反序列化时,当需要将JSON中的int[]转换为ArrayWrapper类型时,会自动检测并调用你定义的隐式转换方法。对于数组来说,这个转换会被逐个应用到数组的每一项上,整个ArrayWrapper[]的反序列化过程就自动完成了。

如果之后你需要把Obj对象再序列化回符合API格式的JSON,只需要加上上面代码里的反向隐式转换,Json.NET同样会自动把ArrayWrapper转回int[],完美适配需求。

这种方式比自定义Converter简洁太多,完全利用了Json.NET内置的类型转换机制,不需要写额外的序列化/反序列化逻辑。

内容的提问来源于stack exchange,提问作者Denis535

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:09:32