我正在使用JSON.NET来序列化复杂模型,我遇到了一个情况,我的反序列化对象不等于序列化对象。
这种情况是由JSON.NET处理IEnumerable类型的方式引起的,
当JSON.NET遇到IEnumerable类型时,它将它作为一个简单的数组,
抛弃所有其他物业。
即使使用TypeNameHandling = TypeNameHandling.All
,字段仍然会从Wrapping JSON对象中忽略。
public class MyModel : List<string>
{
public MyModel(string id)
{
Id = id;
Add("hello");
Add("world");
}
public string Id { get; private set; }
}
反序列化以下类(使用TypeNameHandling = TypeNameHandling.All
)
生产:
{
"$type": "...MyModel[], ...",
"$values": [
"hello",
"world"
]
}
注意将属性Id
从序列化字符串中删除。
现在,我只是将我的所有类型翻译为不是IEnumerable,而是将基类作为成员包含。
e.g。
public class MyModel
{
public List<string> Values { get; private set; }
public MyModel(string id)
{
Values = new List<string>();
Id = id;
Values.Add("hello");
Values.Add("world");
}
public string Id { get; private set; }
}
虽然,对于我的模型,这种解决方法在某种程度上是可以接受的......
这个序列化注定要分散到更多模型然后我的,
而且我不想从模型中“禁止”模型功能(例如IEnumerable
)。
-
任何人都知道如何克服这个问题?
由于