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

如何使用Newtonsoft.Json在C#中反序列化指定JSON对象

用Newtonsoft.Json完成指定JSON的反序列化

你的反序列化失败核心原因是实体类属性名与JSON中的键不匹配,同时嵌套类的结构可以优化,以下是具体解决步骤:

1. 修正实体类定义

方案一:直接匹配JSON键名(推荐)

调整实体类的属性名,使其与JSON中的cat、dog键完全对应:

public class Root
{
    public Cat Cat { get; set; }
    public Dog Dog { get; set; }
}

public class Cat
{
    public string colour { get; set; }
    public string height { get; set; }
}

public class Dog
{
    public string colour { get; set; }
}

方案二:保留原有属性名,用特性映射

如果不想修改属性名,可以通过[JsonProperty]特性显式指定对应的JSON键:

public class DataModel
{
    public class Root
    {
        [JsonProperty("cat")]
        public Cat Cats { get; set; }
        
        [JsonProperty("dog")]
        public Dog Dogs { get; set; }
    }

    public class Cat
    {
        public string colour { get; set; }
        public string height { get; set; }
    }

    public class Dog
    {
        public string colour { get; set; }
    }
}

2. 执行反序列化操作

引入Newtonsoft.Json的命名空间后,使用JsonConvert.DeserializeObject<T>方法完成反序列化:

对应方案一的代码示例

using Newtonsoft.Json;

// 你的JSON字符串
string json = @"
{
    ""cat"": {    
        ""colour"":""brown"",
        ""height"": ""30cm""
    },
    ""dog"": {
        ""colour"":""brown""
    }
}";

// 反序列化到Root类
Root data = JsonConvert.DeserializeObject<Root>(json);

// 验证结果
Console.WriteLine($"猫的颜色:{data.Cat.colour},高度:{data.Cat.height}");
Console.WriteLine($"狗的颜色:{data.Dog.colour}");

对应方案二的代码示例

如果用方案二的嵌套类,反序列化时需要指定完整的类型:

DataModel.Root data = JsonConvert.DeserializeObject<DataModel.Root>(json);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:54:53