1 回答
TA贡献1876条经验 获得超6个赞
您的基本问题是您已声明ErrorDTOas IEnumerator, IEnumerable,即无类型、非泛型可枚举。Json.NET 将这样的对象解释为只读的无类型集合,因此当您尝试填充它时,会出现异常:
System.ArgumentNullException: Value cannot be null.
at System.RuntimeType.MakeGenericType(Type[] instantiation)
at Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(Object list)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Populate(JsonReader reader, Object target)
at Newtonsoft.Json.JsonSerializer.PopulateInternal(JsonReader reader, Object target)
at Newtonsoft.Json.JsonConvert.PopulateObject(String value, Object target, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.PopulateObject(String value, Object target)
异常消息无用且具有误导性,但真正的原因是 Json.NET 无法知道要反序列化到的集合项目的目标类型,或者在反序列化后添加它们的方法,对于任何无类型,只读集合。
解决此类问题的正常方法是声明ErrorDTO为 anICollection<ErrorObj>并实现必要的泛型方法,从而将项目类型和Add()方法通知 Json.NET,但不幸的是,您声明
我不能改变他们[类]。
因此,最简单的解决方法是填充基础列表:
Newtonsoft.Json.JsonConvert.PopulateObject(json, resultDTO.ErrorList);
演示小提琴在这里。
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报