C#使用JavaScriptSerializer反序列化时Details列表为空的问题求助
解决C# JavaScriptSerializer反序列化时Details列表为null的问题
这问题我之前处理过,一眼就能看出核心问题:JSON中的字段名和你的C#类属性名不匹配!
你的JSON里对应明细列表的字段是"details",但你的Docu类里定义的属性却是det——序列化器找不到对应关系,自然就把这个属性设为null了。下面给你两种简单的解决办法:
方法一:修改属性名匹配JSON字段
直接把Docu类里的属性名改成和JSON字段一致的details,这样序列化器会自动匹配绑定:
public class Docu { public string id { get; set; } public string number { get; set; } public string date { get; set; } public string address { get; set; } public string note { get; set; } // 把det改成details,和JSON字段名对应 public List<Details> details { get; set; } } public class Details { public string id { get; set; } public string code { get; set; } public string description { get; set; } }
方法二:用特性指定字段映射(不修改属性名)
如果不想改动属性名,可以给det属性添加[ScriptName]特性(需要引用System.Web.Script.Serialization命名空间),明确告诉序列化器要映射到JSON里的"details"字段:
using System.Web.Script.Serialization; public class Docu { public string id { get; set; } public string number { get; set; } public string date { get; set; } public string address { get; set; } public string note { get; set; } // 添加特性指定JSON字段名 [ScriptName("details")] public List<Details> det { get; set; } } public class Details { public string id { get; set; } public string code { get; set; } public string description { get; set; } }
两种方法任选其一,再运行你的反序列化代码,details(或det)属性就能正确填充JSON里的明细列表了。
内容的提问来源于stack exchange,提问作者marko
相关产品推荐
相关产品推荐

