2013-07-29 11 views
8

Sto utilizzando Json.NET per deserializzare le richieste sul lato server.Come posso deserializzare il numero intero su int, non a lungo?

C'è qualcosa di simile

public object[] Values 

ho bisogno di mettere in valori come 30.0, 27, 54.002, e hanno bisogno di essere double 's e int' s.

Json.NET ha una proprietà chiamata deserializzazione FloatParseHandling, ma non esiste alcuna opzione come IntParseHandling. Quindi la domanda è come posso deserializzare i numeri interi a int?

risposta

9

La cosa migliore è di deserializzare in un modello digitato dove il modello esprime che Values è un int/int[]/ecc Nel caso di qualcosa che ha di essere object/object[] (presumibilmente perché il tipo di non è noto in anticipo, o è una matrice di elementi eterogenei), quindi non è irragionevole per JSON.NET di default a long, poiché ciò causerà la minima confusione quando ci sono una miscela di valori grandi e piccoli in l'array. Oltre a ciò, non ha modo di sapere quale fosse il valore in ingresso (3L (a long), se serializzato in JSON, sembra identico a 3 (uno int)). Si potrebbe semplicemente post-processo Values e cercare qualsiasi che sono long e nella int gamma:

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; 
    } 
} 
Problemi correlati