如何使用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
相关产品推荐
相关产品推荐

