【问题标题】:How can JSON be deserialized in Java when it contains $ref and $id generated by Json.Net C#当JSON包含由Json.Net C#生成的$ref和$id时,如何在Java中反序列化JSON
【发布时间】:2019-01-30 20:28:22
【问题描述】:

我有一个使用 Json.Net C# 库通过以下设置生成的 JSON 字符串:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Formatting = Newtonsoft.Json.Formatting.Indented,
                ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
                PreserveReferencesHandling = PreserveReferencesHandling.All
            };

注意 PreserveReferencesHandling 在 json 中生成引用,而不是在每个对象引用上复制(复制)相同的对象。

如何在 java 中反序列化结果? Google Gson 库无法解析。

更新: 我认为该错误无济于事: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 154944 列路径 $.Tables[0].Columns[4].ForeignKeyTable.ForeignKeyChildren1.Columns[0].ForeignKeyTable 为 BEGIN_OBJECT .索引

我会放一小段 json 数据,注意 $id, $ref: JSON with references format

【问题讨论】:

  • 尽管我很想帮助和我同名的人,但我不能......你需要分享“解析失败”的含义。它给你一个错误吗?如果有,它说了什么?如果您可以共享 JSON 字符串,那也会很有帮助。
  • gson and references的可能重复
  • @DanNeely 我想反序列化而不是序列化,我看看也许它还有帮助。
  • 您真的需要PreserveReferencesHandling.All 还是PreserveReferencesHandling.Objects 就足够了?
  • @dbc 它不会影响我的输出 所有都是必需的

标签: java c# json.net deserialization


【解决方案1】:

最后我找到了一个我修改为符合 JsonNet C# 序列化器格式的 java 库:

https://github.com/jdereg/json-io

将@id、@ref 和@items 更改为$id、$ref 和$values,并将$id 和$ref 中的字符串值从JsonNet C# 解析为java Long(即使在C# 序列化格式中也是一个数字,但它是字符串类型)

也许这也可以帮助其他人..

https://github.com/LucaGabi/json-io.git

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多