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

如何用Newtonsoft直接映射JSON子属性到类属性无需定义子对象?

解决方案1:使用私有嵌套类(最简实现)

不想写额外复杂逻辑的话,你可以在MyObject里定义一个私有嵌套类专门接收job节点,再通过公开属性间接获取job.id——这个私有类仅内部使用,不会对外暴露,完全符合你“无需新建额外类”的要求:

public class MyObject
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    // 私有嵌套类,仅用于内部解析JSON的job节点
    private class JobPartial
    {
        [JsonProperty("id")]
        public string JobId { get; set; }
    }

    // 私有属性接收job对象
    [JsonProperty("job")]
    private JobPartial _job { get; set; }

    // 公开属性直接返回job.id的值
    public string JobId => _job?.JobId;
}

反序列化时Newtonsoft会自动把job节点映射到私有_job属性,你直接通过myObject.JobId就能拿到目标值,全程不用额外处理。


解决方案2:自定义Json转换器(无嵌套类)

如果连私有嵌套类都不想写,可以写一个通用的嵌套属性转换器,直接在JobId属性上配置目标路径:

先定义转换器:

public class NestedPropertyConverter : JsonConverter<string>
{
    private readonly string _propertyPath;

    public NestedPropertyConverter(string propertyPath)
    {
        _propertyPath = propertyPath;
    }

    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var jsonObj = JObject.Load(reader);
        // 通过SelectToken按路径直接取值
        return jsonObj.SelectToken(_propertyPath)?.ToString();
    }

    // 若不需要序列化此属性,WriteJson可留空或抛出异常
    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        throw new NotImplementedException("序列化暂未实现");
    }
}

然后在MyObject中使用:

public class MyObject
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    // 直接指定嵌套路径"job.id"
    [JsonConverter(typeof(NestedPropertyConverter), "job.id")]
    public string JobId { get; set; }
}

反序列化时转换器会自动读取job.id的值,完全不用处理嵌套结构,适合多个嵌套属性的场景。

两种方法都能满足你直接调用JsonConvert.DeserializeObject<MyObject>(response)的需求,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:22:46