Esiste un modo per sovrascrivere il comportamento di deserializzazione predefinito di Json.net quando si gestiscono tipi primitivi? Ad esempio quando la deserializzazione l'array json [3.14,10,"test"]
ad un tipo di object[]
3.14 sarà di tipo double
e sarà di tipo long
. Posso comunque intercettare o ignorare questo tipo di decisione in modo da poter deserializzare i valori come decimal
e int
rispettivamente?Ignora la gestione di tipo primitivo predefinita in Json.Net
Fondamentalmente voglio sempre interi json restituire sempre come int
e float per restituire come decimal
. Questo mi farà risparmiare un po 'di dover iniettare double
in decimal
conversioni nel mio codice.
Ho cercato di estendere Newtonsoft.Json.Serialization.DefaultContractResolver
e di implementare il mio Newtonsoft.Json.JsonConverter
ma non ho ancora scoperto alcun modo per implementare questa sovrascrittura desiderata. Codice
Esempio di riprodurre
object[] variousTypes = new object[] {3.14m, 10, "test"};
string jsonString = JsonConvert.SerializeObject(variousTypes);
object[] asObjectArray = JsonConvert.DeserializeObject<object[]>(jsonString); // Contains object {double}, object {long}, object {string}
JsonTextReader.SetToken non è contrassegnato come virtuale nel mio rilascio di json.net 4.5.1, così l'override sta lanciando un "metodo non adatto per l'override". Mi sto perdendo qualcosa? –
@MatthewRuston La mia attuale versione di Json.Net è '4.0.5'. –
sembra che abbiano rimosso la proprietà virtuale in una versione recente. Strano. –