Java-Gson不使用动态定义的对象
我不想为了进行json转换而定义额外的类型。我使用的库需要一个对象作为输入,然后对该数据执行http操作,因此我不能使用硬编码的json字符串作为输入Java-Gson不使用动态定义的对象,java,json,gson,Java,Json,Gson,我不想为了进行json转换而定义额外的类型。我使用的库需要一个对象作为输入,然后对该数据执行http操作,因此我不能使用硬编码的json字符串作为输入 private static final Gson GSON = new Gson(); public static void main(String[] args) { System.out.println(GSON.toJson(new Object() { private String email_address = "me@
private static final Gson GSON = new Gson();
public static void main(String[] args) {
System.out.println(GSON.toJson(new Object() {
private String email_address = "me@mail.eu";
public String getEmail_address() {return "me@mail.eu"; }
public void setEmail_address(String mail) {email_address = mail; }
}));
}
我试图删除getter和setter,或者离开getter并删除字段,但不起作用。有人知道如何解决这个问题吗?为什么不定义一个额外的类型?我们不是在80年代。我会亲自使用DTO
但也许您的问题的答案就在这里:为什么不定义一个额外的类型?我们不是在80年代。我会亲自使用DTO
但您的问题的答案可能就在这里:用于Json序列化/反序列化(如Gson)的库,请相信您已经定义了自定义对象,您将在其上映射Json字符串。这是因为它们使用类上的反射将字段与json中相应的键映射。没有它,他们很难实现任何(可用的)目标 用于Json序列化/反序列化(如Gson)的库依赖于这样一个事实,即您已经定义了自定义对象,您将在其上映射Json字符串。这是因为它们使用类上的反射将字段与json中相应的键映射。没有它,他们很难实现任何(可用的)目标 在哪里声明了
GSON
?@mceponder fixed为什么要使用protected static final GSON GSON=new com.google.GSON.GsonBuilder().create()
而不仅仅是受保护的静态最终Gson Gson=new Gson()代码>?不确定它是否会改变什么——只是好奇。@AlexanderJansing是的,我也很好奇:)也许它有一些参数,它们被删除了。fixed.Ad-hoc匿名对象序列化在Gson中被禁止。有关正式文档,请参阅。您将获得null
,因为已排除匿名对象:。因此,接受的答案只是误导。声明的GSON
在哪里?@mceponder fixed为什么要使用protected static final GSON GSON=new com.google.GSON.GsonBuilder().create()
而不仅仅是受保护的静态最终Gson Gson=new Gson()代码>?不确定它是否会改变什么——只是好奇。@AlexanderJansing是的,我也很好奇:)也许它有一些参数,它们被删除了。fixed.Ad-hoc匿名对象序列化在Gson中被禁止。有关正式文档,请参阅。您将获得null
,因为已排除匿名对象:。因此,公认的答案只是误导。如何解释?官方文档:与内部类、匿名类和本地类中的外部类相对应的字段被忽略,不包括在序列化或反序列化中。匿名类可以很容易地使用反射进行内省。我不理解你的问题,你能用不同的方式陈述它吗?你的答案只是没有说明OP提出问题的真正原因或解释。我已经多次阅读了你的答案,但我不知道它是如何回答的。OP正在创建一个匿名类对象,Gson也可以在其上使用反射,但其设计禁止它。对于我来说,如果这些对象是以传出序列化方式使用的,并且从来没有用于反序列化目的,那么临时匿名对象类似乎是一个明智的想法。如何实现?官方文档:与内部类、匿名类和本地类中的外部类相对应的字段被忽略,不包括在序列化或反序列化中。匿名类可以很容易地使用反射进行内省。我不理解你的问题,你能用不同的方式陈述它吗?你的答案只是没有说明OP提出问题的真正原因或解释。我已经多次阅读了你的答案,但我不知道它是如何回答的。OP正在创建一个匿名类对象,Gson也可以在其上使用反射,但其设计禁止它。不过,如果这些对象是以传出序列化方式使用的,并且从未用于反序列化目的,那么对于我来说,即席匿名对象类似乎是一个明智的想法。