2013-07-29 12 views
8

Używam Json.NET do deserializacji żądań po stronie serwera.Jak można deserializować liczbę całkowitą do int, nie na długo?

Istnieje coś takiego jak

public object[] Values 

muszę umieścić w wartościach jak 30.0, 27, 54.002, i muszą być double 's' i int s.

Json.NET ma właściwość deserializacjia nazwie FloatParseHandling, ale nie ma opcji jak IntParseHandling. Pytanie brzmi: jak mogę zserializować liczby całkowite do int?

Odpowiedz

9

Najprościej jest deserializowania do modelu maszynowy gdzie model wyraża że Values jest int/int[]/itd. W przypadku czegoś, co ma być object/object[] (prawdopodobnie dlatego, że typ nie jest dobrze znany z góry lub jest zbiorem heterogenicznych elementów), wtedy JSON.NET domyślnie nie jest nierozsądny, aby ustawić domyślną wartość na long, ponieważ spowoduje to najmniejsze zamieszanie w przypadku połączenia dużej i małej wartości w tablica. Poza tym nie ma możliwości dowiedzenia się, jaka wartość była w drodze (3L (a long), gdy jest serializowane w JSON, wygląda identycznie jak 3 (int)). Można po prostu postprocesowego Values i patrzeć na te, które są long iw zakresie int:

for(int i = 0 ; i < Values.Length ; i++) 
{ 
    if(Values[i] is long) 
    { 
     long l = (long)Values[i]; 
     if(l >= int.MinValue && l <= int.MaxValue) Values[i] = (int)l; 
    } 
}