2012-11-01 16 views
16

Nella comunicazione di prototipazione tra app desktop .NET e server Java, utilizzando REST con post JSON, si verifica un problema di distinzione tra maiuscole e minuscole. Gli oggetti .NET hanno proprietà in Pascal Casing (che è convenzionale per .NET), ad esempio Symbol, EntryValue (ecc.), Mentre la rappresentazione Java dello stesso oggetto utilizza l'alloggiamento del cammello, ad es. symbol, entryValue.È possibile deserializzare GSON senza distinzione tra maiuscole e minuscole.

Il server riceve valore JSON come:

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

Ma GSON non deserializzare in maniera case-insensitive. C'è un modo per convincere Gson a fare questo?

risposta

33

Utilizzare FieldNamingPolicy su un GsonBuilder, per ottenere l'oggetto Gson. Il tuo sembra corrispondere a UPPER_CAMEL_CASE.

Per eventuali eccezioni, annotare il campo classe con un'annotazione @SerializedName.

+0

Fantastico! Questo problema è stato facilmente risolto utilizzando la politica UPPER_CAMEL_CASE. L'abbiamo trovato nei documenti? Nella mia fretta di testare questo, non ero in grado di leggere completamente i documenti, e le ricerche veloci non indicavano la risposta chiaramente come hai fatto tu. Grazie! –

+0

@ Sam Si trova in fondo alla pagina nella [guida per l'utente] (https://sites.google.com/site/gson/gson-user-guide#TOC-JSON-Field-Naming-Support). Assicurati di dare un'occhiata a GsonBuilder per vedere tutte le configurazioni supportate da Gson! –

+0

@Jeff Bowman Questa non è una soluzione valida, perché NON corrisponde alla distinzione tra maiuscole e minuscole. Corrisponde solo a ciò che è definito in SerializedName o se inizia con una grande lettera in stile case cammello. Se c'è un json che inizia con una piccola lettera (senza un'annotazione SerializedName), non corrisponderà. – Bevor

Problemi correlati