【发布时间】:2017-09-11 08:15:07
【问题描述】:
我有非常复杂的 JSON,其中有许多来自后端的嵌套字段,例如,
{
"a": ...
"b": ...
"not-required-1":{
"not-required-2":[
...
]
..
},
"not-required-3":{
"not-required-4":[
...
]
...
}
}
我只对“a”和“b”感兴趣,我可以映射到对应的值类型。但是对象有很多我不需要的字段,但是当我对“a”和“b”进行更改时,它们应该序列化。
如果我只用“a”和“b”创建类型,当我序列化我的对象时,所有“非必需”字段都消失了。唯一的选择是将不需要的每个字段映射到相应的 Java 类,但它们的数量为 100。
澄清,
后端发送 JSON,它在我的代码中处理,我需要将 JSON 发送回后端。虽然我不需要处理所有字段,但这并不意味着后端不需要它们。
我想将传入的 JSON 转换为 POJO,并在整个应用程序中使用它,然后使用 GSON 将其序列化回 JSON。
C# 的 JSON.NET 库支持使用 Json.Linq 进行混合对象序列化。
c# 示例。
class DataObject{
[JsonProperty("a")]
DataA A {get;set;}
[JsonProperty("b")]
DataB B {get;set;}
[JsonProperty("not-required-a")]
Json.Linq.JsonElement NotRequiredA {get;set;}
[JsonProperty("not-required-b")]
Json.Linq.JsonElement NotRequiredB; {get;set;}
}
在 C# 中这种方式我不需要映射 NotRequiredA 和 NotRequiredB 的字段,但它们会在需要时正确序列化。
【问题讨论】:
-
不清楚:但是对象有很多我不需要的字段,但是当我在“a”和“b”中进行更改时,它们应该序列化。您自相矛盾。你不是他们,还是他们应该序列化?!你不能两全其美。
-
@GhostCat JSON 来自某个地方,我必须对其进行修改和序列化并将其发送到某个地方......其他一些应用程序(后端)需要那些我不需要的字段,我只需要通过。
-
您尝试过使用
JSONObject实例吗?因为 JSON 中的内容并不重要,您始终可以只操作选定的字段。所以,真的没有必要仅仅为了能够操作一些选定的字段而创建“部分 JSON”。 -
@ZeekHuge 我需要 GSON 的东西
-
我认为你没有得到它。 GSON 是将 Java 对象转换为 JSON,以便您能够对其进行序列化(这意味着 JSON 对象可以很容易地序列化)。但是您已经有了 JSON,无需使用 GSON 即可轻松对其进行序列化。只需将其转换为字符串。就如此容易。当您想要将对象从应用程序的一个组件传输到另一个组件时,通常需要序列化。