Question

J'utilisais Json.Net aux dictionnaires de sérialisation de type dictionnaire, et quand j'ai ajouté des entiers ou booléens au dictionnaire, quand désérialisation je retrouverais les entiers et les booléens. Maintenant, je tentais de changer mon code pour utiliser ServiceStack.Text à la place en raison d'un problème dans une autre partie du code avec la sérialisation des dates, mais maintenant je reçois les booléens un entiers comme des chaînes après désérialisation. Est-il possible d'avoir le même comportement que Json.Net?

Voici le code de le reproduire: https://gist.github.com/1608951 Test_JsonNet passe, mais les deux Test_ServiceStack_Text_TypeSerializer et Test_ServiceStack_Text_JsonSerializer fail

Était-ce utile?

La solution

Il est une décision de conception efficace qu'aucune information de type est émis pour les types de primitives valeur qui est la raison pour laquelle les valeurs sont laissées sous forme de chaînes.

Vous avez soit à désérialiser dans une forte POCO typé qui détient les informations de type:

public class MixType
{
    public string a { get; set; }
    public int b { get; set; }
    public bool c{ get; set; }
}

var mixedMap = new Dictionary<string, object> {
    { "a", "text" },
    { "b", 32 },
    { "c", false },
};

var json = JsonSerializer.SerializeToString(mixedMap);
Console.WriteLine("JSON:\n" + json);

var mixedType = json.FromJson<MixType>();
Assert.AreEqual("text", mixedType.a);
Assert.AreEqual(32, mixedType.b);
Assert.AreEqual(false, mixedType.c);

Ou deserialize en Dictionary<string,string> et analyse syntaxique dans des types spécifiques de vous-même.

Ou deserialize en utilisant l'API dynamique ServiceStack. Voir ServiceStack dossier de dynamique JSON test des exemples sur la façon de le faire.

Autres conseils

Vous pouvez maintenant faire ceci:

JsConfig.TryToParsePrimitiveTypeValues = true;

Ce qui fera l'essai de désérialiseur JSON pour déterminer quels sont les types doivent être, et vous obtiendrez vos entiers comme des entiers dos, booléens arrière comme booléens, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top