使用C#反序列化JSON文件失败:results对象执行后为null
解决JSON反序列化后返回null的问题
嘿,我一眼就瞅出你遇到的问题啦!主要有两个关键原因导致反序列化后results为null,咱们一步步来搞定:
1. JSON格式不完整(最核心问题)
你提供的JSON片段只是"searchResults": [...],但这不是一个合法的顶层JSON对象——JSON反序列化要求顶层要么是用{}包裹的对象,要么是数组。现在的结构缺少外层包裹,导致JavaScriptSerializer没法把它正确映射到SearchResults类上,直接返回了null。
修正后的完整JSON应该是这样:
{ "searchResults": [ { "startTime": 1604466366253, "parameter": { "name": "CntIOParts", "value": 0, "datatype": "int" } }, { "startTime": 1604478998001, "parameter": { "name": "CntIOParts", "value": 0, "datatype": "int" } } ] }
2. 确保SearchResults类结构与JSON完全匹配
你的类结构必须和JSON的层级、属性名对应上(JavaScriptSerializer默认大小写敏感,除非你用特性指定映射)。正确的类定义应该是这样:
public class SearchResults { // 属性名要和JSON里的"searchResults"完全一致 public List<ResultItem> searchResults { get; set; } } public class ResultItem { public long startTime { get; set; } public Parameter parameter { get; set; } } public class Parameter { public string name { get; set; } public int value { get; set; } public string datatype { get; set; } }
验证修正后的代码
把修正后的JSON和正确的类结构结合,你的反序列化代码就能正常工作了:
string FilePath = openfiledialog.FileName; string JSONfile = File.ReadAllText(FilePath); JavaScriptSerializer js = new JavaScriptSerializer(); SearchResults results = js.Deserialize<SearchResults>(JSONfile); // 现在results应该能正确获取到数据啦
如果还是有问题,可以试着捕获ArgumentException,或者输出JSON的完整内容,确认没有其他格式错误~
内容的提问来源于stack exchange,提问作者edgj4718
相关产品推荐
相关产品推荐

