¿Existe alguna manera de anular el comportamiento de deserialización predeterminado de Json.net cuando se manejan tipos primitivos? Por ejemplo, cuando deserializar la matriz json [3.14,10,"test"]
a un tipo de object[]
3,14 será de tipo double
y será de tipo long
. ¿Hay alguna manera de que pueda interceptar o anular esta decisión de tipo para poder deserializar los valores como decimal
y int
, respectivamente?Anulación del manejo predeterminado de tipo primitivo en Json.Net
Básicamente siempre quiero enteros json para siempre devolver como int
y flotantes para devolver como decimal
. Esto me ahorrará tener que inyectar double
a decimal
conversiones en mi código.
He buscado ampliar Newtonsoft.Json.Serialization.DefaultContractResolver
e implementar mi propio Newtonsoft.Json.JsonConverter
pero no he descubierto ninguna forma de implementar esta anulación deseada. código
Ejemplo de reproducir
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 no está marcado como virtual en mi liberación de json.net 4.5.1, por lo que la anulación está lanzando un 'método no apropiado para anular'. ¿Me estoy perdiendo de algo? –
@MatthewRuston Mi versión actual de Json.Net es '4.0.5'. –
parece que eliminaron la propiedad virtual en una versión reciente. Extraño. –