我有一块看起来像这样的JSON:
[
{
"$id": "1",
"Name": "James",
"BirthDate": "1983-03-08T00:00Z",
"LastModified": "2012-03-21T05:40Z"
},
{
"$ref": "1"
}
]
Run Code Online (Sandbox Code Playgroud)
正如你可以通过$ ref告诉的那样,这个JSON数组包含两次相同的Person(James).第二次是对第一次的引用.
我想知道是否有办法将这个JSON 反序列化为一个包含两个詹姆斯人副本的对象.
目前,我正在使用这个:
var jsonSerializerSettings = new JsonSerializerSettings()
{
PreserveReferencesHandling = PreserveReferencesHandling.None,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var deserializedPersons = JsonConvert.DeserializeObject<List<Person>>(json, jsonSerializerSettings);
Run Code Online (Sandbox Code Playgroud)
但这只是给我一个数组,其中包含相同的Person实例,两次:
object.ReferenceEquals(deserializedPersons[0], deserializedPersons[1]) // Evaluates to true
Run Code Online (Sandbox Code Playgroud)
我找到了一个我不满意的解决方法,它只是反序列化JSON字符串,然后使用上面的jsonSerializerSettings序列化它,它将复制JSON中的人,然后再次反序列化它.这导致我们正在使用的大型物体出现严重减速.
注意:我知道我可以更改从检索此JSON的API以复制数据,但保留引用可以在通过线路发送响应JSON时节省大量空间.