Gson: JsonSyntaxException à la date
Je suis en train d'utiliser Gson pour désérialiser un tableau json, mais je suis actuellement un JsonSyntaxException. La chaîne json a été créé par un .NET MVC3 service web à l'aide de JsonResult (sens, je ne suis pas manuellement la création du json, il est créé par une bibliothèque qui, je le sais pour travailler sur plusieurs autres plateformes).
C'est le json:
[{"PostID":1,"StudentID":39,"StudentName":"Joe Blow",
"Text":"Test message.","CreateDate":"\/Date(1350178408267)\/",
"ModDate":"\/Date(1350178408267)\/","CommentCount":0}]
C'est le code:
public class Post {
public int PostID;
public int StudentID;
public String StudentName;
public String Text;
public Date CreateDate;
public Date ModDate;
public Post() { }
}
Type listOfPosts = new TypeToken<ArrayList<Post>>(){}.getType();
ArrayList<Post> posts = new Gson().fromJson(json, listOfPosts);
L'exception dit que le format de la date est invalide:
com.google.gson.JsonSyntaxException: /Date(1350178408267)/
Ce que quelqu'un sait ce qui se passe?
source d'informationauteur mtmurdock
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une réponse ici mais j'ai trouvé ça étrange qu'il n'y a pas un moyen plus facile. Plusieurs autres json bibliothèques, j'ai utilisé de soutenir le .NET format json natif. J'ai été surpris quand Gson ne pas s'en occuper. Il doit y avoir une meilleure façon. Si quelqu'un connaît, merci de le poster ici. Tout de même, c'était ma solution:
J'ai créé un custom JsonDeserializer et enregistrée pour le type Date. Ce faisant, Gson utilisera mon deserializer pour le type Date au lieu de sa valeur par défaut. La même chose peut être fait pour n'importe quel autre type si vous souhaitez sérialiser/désérialiser de manière personnalisée.
Puis, quand je suis entrain de créer mon Gson objet:
Maintenant mon gson objet sera capable d'analyser le .NET format de la date (millis depuis 1970).
Une autre solution est d'utiliser ISO 8601 format. Ce doit être configuré sur les deux Gson côté:
ainsi que sur le côté serveur, par exemple pour ASP.NET MVC dans
Global.asax.cs
fichier, comme suit:L'avantage de le code ci-dessus est qu'il gère à la fois la sérialisation et la désérialisation et permet ainsi de deux voies de transmission des dates/heures.
Remarque:
IsoDateTimeConverter
classe fait partie de la JSON.NET bibliothèque.Sérialiser et Désérialiser methoda. Inscrivez ceci comme un Adaptateur pour GSON
Cette solution fonctionne pour moi en utilisant SqlDateTypeAdapter:
Ref: https://stackoverflow.com/a/30398307/7308789