【问题标题】:Can GSON deserialize in a case-insensitive wayGSON 能否以不区分大小写的方式反序列化
【发布时间】:2012-11-01 04:43:46
【问题描述】:

在 .NET 桌面应用程序和 Java 服务器之间的原型通信中,使用带有 JSON 帖子的 REST,我遇到了区分大小写的问题。 .NET 对象在 Pascal Casing 中具有属性(对于 .NET 来说是常规的),例如:Symbol, EntryValue(等),而同一对象的 Java 表示使用驼峰式大小写,例如symbol, entryValue

服务器接收到的json值为:

{"EntrySize":100,"Symbol":"AMZN"}

但 Gson 不会以不区分大小写的方式反序列化。有没有办法让 Gson 做到这一点?

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    GsonBuilder 上使用FieldNamingPolicy,以获取您的Gson 对象。你的似乎与 UPPER_CAMEL_CASE 匹配。

    Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();
    

    对于任何例外情况,请使用 @SerializedName 注释来注释您的类字段。

    【讨论】:

    • 太棒了!使用 UPPER_CAMEL_CASE 策略可以轻松解决此问题。我们在文档中找到了这个吗?在我急于测试这一点时,我无法完全阅读文档,并且快速搜索并没有像你那样清楚地指出答案。谢谢!
    • @Sam 它在user guide 的页面下方。确保您浏览 GsonBuilder 以查看 Gson 支持的所有配置!
    • @Jeff Bowman 这实际上不是一个有效的解决方案,因为它不匹配不区分大小写。它只匹配 SerializedName 中定义的内容,或者它以驼峰式风格的大字母开头。如果有以小写字母开头的json(没有Seri​​alizedName注解),则不匹配。
    • @Bevor:我同意这不是对所有不区分大小写请求的通用解决方案,无论如何这都会变得棘手。 如果您在同一个 JSON 对象中有 entrysizeENTRYSIZEEntrySize 怎么办?哪个胜出? 但是,它确实允许 OP 做他们想做的事情,即在服务器上获取 lower-camel 命名以与客户端上的 upper-camel 命名一起使用,而且似乎即使在这个有限的范围内,社区也发现答案很有用。
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多