我之前的问题没有得到任何结果,可能是我问得不对,或者太详细了。
现在我的基本问题是,如何将一个具有一个类名的JSON对象反序列化为一个具有不同类名的Java对象?
例如,服务器发送/期望的JSON类是“18”(我对此控制为零)。我的Java班不可能是“18”,所以是“_18”。
简单地执行new Gson().fromjson()没有任何帮助,即使使用了不同的命名策略;_18对象始终为NULL。从那以后,我读过关于类型适配器和不同注释的文章,但仍然不清楚如何处理。似乎最明智的方法@SerializedName,显然不能用于类本身,只能用于字段成员。
如何将一个类名为18的JSON对象反序列化为一个名为_18的Java类(或者,更好的是,如果可能的话,我可以给这个类起一个真实的名字)?
示例JSON,按请求:
"18": {
"field1": "value1",
"field2": "value2",
"field3": "value3"
}
首先,JSON没有类的概念,它是对象的字符串表示。因此,您的示例只是一个格式错误的JSON。一定是这样的:
{"18":
{
"field1": "value1",
"field2": "value2",
"field3": "value3"
}
}
这是具有字段“18”的有效JSON对象,而另一个类依次具有field1
、field2
和field3
属性。
因此,如果服务器返回像show这样的JSON字符串--要解析它,您必须用{}包围它,然后您的Java类将具有“18”的属性,因为您希望通过@serializedname
注释为Java命名它。
请参阅下面的示例测试用例:
public static void main(String... args) throws Exception {
String testJson = "{\"18\":{\"name\":\"poomba\",\"value\":\"topchoomba\"}}";
Gson gson = new GsonBuilder().create();
MyClassFor18 test18 = gson.fromJson(testJson, MyClassFor18.class);
System.out.println(test18);
}
private static class MyClassFor18 {
@SerializedName ("18")
private TestPojo valueObject;
public TestPojo getValueObject() {
return valueObject;
}
public void setValueObject(TestPojo valueObject) {
this.valueObject = valueObject;
}
@Override
public String toString() {
return "MyClassFor18 (value=" + valueObject + ")";
}
}
private static class TestPojo {
private String name;
private String value;
public TestPojo(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "TestPojo { name=" + this.name + ", value=" + this.value
+ "}";
}
}
问题内容: 是否可能:在类中有一个字段,而在Jackson库中进行序列化/反序列化时却为其使用不同的名称? 例如,我有“ Coordiantes”类。 对于从JSON反序列化,希望具有以下格式: 但是当我序列化对象时,结果应该是这样的: 我试图通过在getter和setter上都应用注释(具有不同的值)来实现此目的: 但我有一个例外: org.codehaus.jackson.map.exc.Un
问题内容: 我在这里发现了同样的问题… …但是没有正确的答案。 最好的建议之一是将嵌套对象包装到新类中,但是这种方法引入了另一个问题:乐高名称。 在我的示例中,此类的最逻辑名称是与父类相同的名称,当然这是不可能的。我的示例很简单,我只想消除父类中的“语言”属性。有人可以帮我做吗? json的示例: 问题答案: 如果JSON属性名称与c#命名约定冲突,则可以在序列化期间使用或批注替换其他名称。 例如
我有一个通过RabbitMQ作为消息发送的类,在sender服务上,它的定义如下: 并且在接收方服务上: 在receiver controller中,我有以下方法,它应该接受该消息,将其转换为一个对象,并将其保存在数据库中,看起来如下所示: 编辑:根据请求添加堆栈跟踪。
问题内容: 我有一个像这样的POJO,我正在使用GSON序列化为JSON: 这是我的做法: 现在我的json将是这样的: 现在我的问题是:有什么办法可以代替更改变量名呢?在Gson中,我可以在变量顶部使用任何注释吗? 我想要这样的东西: 问题答案: 您可以使用@SerializedName(“ client_id”) 编辑: 您也可以使用它,以通用方式更改所有字段
我想实现一个功能,其中请求映射到正确的对象。是否有一种方法(除了自定义反序列化器)可以将请求按类型/基数映射到适当的对象?任何见解都将不胜感激!
有没有办法将类序列化为json,但只使用我想在特定情况下使用的字段,而不需要创建类的多个变体?让我们举个例子: 现在,在我的一个方法中,我希望有一个到json对象的映射,该对象只包含name、city和anotherDummyString。 在第二种方法中,我想有姓氏和城市。在第三种方法中...... 有什么愉快而巧妙的方法来实现这一点吗?我想知道我是否可以“隐藏”这些我不需要的字段。