ServiceStack.Text Serialing Dictionaries
-
27-10-2019 - |
Domanda
Stavo usando JSON.NET per serializzare i dizionari del dizionario di tipo e quando ho aggiunto numeri interi o booleani al dizionario, quando deserializzavo avrei ricevuto numeri interi e booleani. Ora stavo cercando di modificare il mio codice per usare ServiceStack.Text invece a causa di un problema in un'altra parte del codice con la serializzazione delle date, ma ora ottengo i numeri interi booleani come stringhe dopo la deserializzazione. C'è un modo per avere lo stesso comportamento di json.net?
Ecco il codice per riprodurlo: https://gist.github.com/1608951Test_jsonnet passa, ma entrambi test_servicestack_text_typeserializer e test_servicestack_text_jsonserializer fail
Soluzione
È una decisione di progettazione intenzionale che non vengono emesse informazioni di tipo per tipi di valore primitivo, motivo per cui i valori vengono lasciati come stringhe.
O
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);
O deserializzazione in a Dictionary<string,string>
E analizza te stesso in tipi specifici.
O deserializza usando l'API dinamica di ServiceStack. Vedere La dinamica cartella del test JSON di ServiceStack per esempi su come farlo.
Altri suggerimenti
Ora puoi farlo:
JsConfig.TryToParsePrimitiveTypeValues = true;
Che farà provare a JSON Deserialiser di determinare quali dovrebbero essere i tipi e riavere i tuoi numeri interi come numeri interi, booleani come booleani, ecc.