你的基本问题是你已经声明
ErrorDTO
作为
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无法知道要反序列化到的集合项的目标类型,或者对于任何非类型化的只读集合,在反序列化后添加它们的方法。
解决这类问题的正常方法是
错误的
作为一个
ICollection<ErrorObj>
并实现必要的通用方法,从而通知json.net项类型和
Add()
方法,但不幸的是,您声明
我不能改变他们[班级]。
因此,最简单的解决方法是填充底层列表:
Newtonsoft.Json.JsonConvert.PopulateObject(json, resultDTO.ErrorList);
演示小提琴
here
.