Czy istnieje sposób na przesłonięcie domyślnego zachowania deserializacji Json.net podczas obsługi typów pierwotnych? Na przykład, gdy deserializacji tablicy json [3.14,10,"test"]
do rodzaju object[]
3,14 będzie typu double
i będzie typu long
. Czy mimo to mogę przechwycić lub zmienić tę decyzję, aby móc odpowiednio przekształcić wartości na odpowiednio decimal
i int
?Zastępowanie domyślnej obsługi typów pierwotnych w Json.Net
W zasadzie zawsze chcę, aby liczba całkowita json zawsze zwracała się jako int
i wyświetlała się jako decimal
. Pozwoli mi to zaoszczędzić trochę czasu na wstrzyknięciu double
do decimal
konwersji w moim kodzie.
Szukałem rozszerzenia Newtonsoft.Json.Serialization.DefaultContractResolver
i wdrożenia własnego Newtonsoft.Json.JsonConverter
, ale nie odkryłem żadnego sposobu na wdrożenie tego pożądanego nadpisania.
Przykład kodu do odtworzenia
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 nie jest oznaczony jako wirtualny w moim wydaniu Json.NET 4.5.1, więc nadpisanie rzuca "nie nadaje się do zastąpienia". Czy czegoś brakuje? –
@MatthewRuston Moja aktualna wersja Json.Net to '4.0.5'. –
Wygląda na to, że usunęli wirtualną właściwość w najnowszej wersji. Dziwne. –