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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top