【问题标题】:JSON.Net mapping circular references when deserializing反序列化时的 JSON.Net 映射循环引用
【发布时间】: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.htmnewtonsoft.com/json/help/html/…。您也许可以在 [OnDeserialized] 回调中添加反向引用,请参阅 newtonsoft.com/json/help/html/SerializationCallbacks.htm
  • @DanNguyen 该结构大约有五层深。是的,我希望他们像今天一样引用父母。但如果可能的话,我希望 JSON.Net 也映射实际的父对象引用。
  • @Jerodev 没问题,我问的是反序列化功能。抱歉,如果不清楚

标签: c# json json.net


【解决方案1】:

如果您要定义一组特定的结构以反序列化为..

我已经使用这个(和类似的实用程序)开始工作,然后根据需要进行了修改: http://json2csharp.com

还有一个指向 quicktype 的链接,它提供了额外的功能。

我也使用了以下实用程序,您只需下载并构建它,它是最基本的,但可以完成工作:

https://github.com/JsonCSharpClassGenerator/JsonCSharpClassGenerator/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2016-08-13
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    相关资源
    最近更新 更多