Java 8 LocalDateTime désérialisé à l'aide de Gson
J'ai JSONs avec une date-heure d'attribut dans le format "2014-03-10T18:46:40.000 Z", que je tiens à désérialiser en java.temps.LocalDateTime champ à l'aide de Gson.
Quand j'ai essayé de désérialiser, j'obtiens l'erreur:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
Est-ce qui se passe lors de la sérialisation ou de la dé-sérialisation. Si c'est la deuxième case si votre json est valide - par exemple, il a commencer avec
Je fais une erreur de son lors de la sérialisation. Json -> Objet. Mais je pense que mon Json est ok. Si je remplace dans mon objet de mon attribut LocalDateTime avec de la Ficelle, il fonctionne.
json est au format
Ok, je comprends maintenant pourquoi il ne fonctionne pas. Mais peut-être que vous savez si il y a quelque chose que je peux faire? Comme une des options spéciales avec Gson pour dire si j'ai une Chaîne de caractères avec une Date et Heure pour désérialiser ce domaine et de créer l'objet dont j'ai besoin?
Je ne peux pas vous dire quelque chose avant que je vois la chaîne. Mais de toute façon, vous ne pouvez pas dé-sérialiser à moins qu'il n';s json valide. A mon avis le meilleur (et peut-être la seule chose que vous pouvez faire est de faire de cette chaîne json valide.
{
(aka BEGIN_OBJECT), mais au lieu de votre json commence avec un personnageJe fais une erreur de son lors de la sérialisation. Json -> Objet. Mais je pense que mon Json est ok. Si je remplace dans mon objet de mon attribut LocalDateTime avec de la Ficelle, il fonctionne.
json est au format
{"key":"value"}
Votre json est certainement pas valide. Comme je l'ai dit dans gson {
est BEGIN_OBJECT
et il est dit que c';s disparus. Juste println()
le json pour vérifier si elle est correcte. Vous pouvez aussi imprimer le serialized
objet pour voir comment le json devrait ressembler à ça 🙂Ok, je comprends maintenant pourquoi il ne fonctionne pas. Mais peut-être que vous savez si il y a quelque chose que je peux faire? Comme une des options spéciales avec Gson pour dire si j'ai une Chaîne de caractères avec une Date et Heure pour désérialiser ce domaine et de créer l'objet dont j'ai besoin?
Je ne peux pas vous dire quelque chose avant que je vois la chaîne. Mais de toute façon, vous ne pouvez pas dé-sérialiser à moins qu'il n';s json valide. A mon avis le meilleur (et peut-être la seule chose que vous pouvez faire est de faire de cette chaîne json valide.
OriginalL'auteur fische | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
L'erreur se produit lors de la désérialisation du LocalDateTime attribut parce qu'GSON ne parvient pas à analyser la valeur de l'attribut n'est pas au courant de la LocalDateTime objets.
Utilisation GsonBuilder de registerTypeAdapter méthode pour définir la coutume LocalDateTime adaptateur.
Extrait de code suivant vous aidera à désérialiser le LocalDateTime attribut.
OriginalL'auteur Randula
D'étendre @Randula réponse, pour analyser un zoné date chaîne de temps (2014-03-10T18:46:40.000 Z) en JSON:
c'est un
java.lang.reflect.Type
OriginalL'auteur Evers
À même de prolonger @Evers réponse:
Vous pouvez simplifier encore plus avec un lambda comme suit:
OriginalL'auteur nterry