【发布时间】:2017-09-14 06:31:36
【问题描述】:
我有一个看起来像这样的数据结构:foo 1:* bar, e.g.
{
id: 1,
children: [
{ id: 1, fooId: 1, foo: null },
{ id: 2, fooId: 1, foo: null }
]
}
在反序列化这个数据结构时,有没有办法让JSON.Net根据键设置实际的对象引用(即在我上面的示例中将foo属性设置为父对象)?
为了进一步阐述,这就是我所追求的:
var data = JsonConvert.DeserializeObject<Foo>(json);
Assert.AreEqual(data, data.children[0].Foo)
【问题讨论】:
-
您是否在
Foo类中正确定义了属性?究竟是什么问题? -
而 foo 有了孩子,永远继续下去。什么时候结束?为什么不让孩子通过 foo Id 引用它的父母?
-
Json.NET 有一种保留引用的机制,但它有不同的语法,请参阅newtonsoft.com/json/help/html/PreserveObjectReferences.htm 和newtonsoft.com/json/help/html/…。您也许可以在
[OnDeserialized]回调中添加反向引用,请参阅 newtonsoft.com/json/help/html/SerializationCallbacks.htm -
@DanNguyen 该结构大约有五层深。是的,我希望他们像今天一样引用父母。但如果可能的话,我希望 JSON.Net 也映射实际的父对象引用。
-
@Jerodev 没问题,我问的是反序列化功能。抱歉,如果不清楚