2013-07-29 26 views
8

Tôi đang sử dụng Json.NET để deserialize yêu cầu trên phía máy chủ.Làm thế nào tôi có thể deserialize số nguyên int, không dài?

Có cái gì đó như

public object[] Values 

tôi cần để đưa vào giá trị như 30.0, 27, 54.002, và họ cần phải double 's và int' s.

Json.NET có một tài sản deserialization gọi FloatParseHandling, nhưng không có tùy chọn như IntParseHandling. Vì vậy, câu hỏi là làm thế nào tôi có thể deserialize số nguyên để int?

Trả lời

9

Tốt nhất là để deserialize vào một mô hình đánh máy nơi mô hình bày tỏ rằng Values là một int/int[]/vv Trong trường hợp của một cái gì đó object/object[] (có lẽ vì loại không nổi tiếng trước, hoặc nó là một mảng các mục không đồng nhất), sau đó nó không phải là không hợp lý cho JSON.NET để mặc định là long, vì điều đó sẽ gây ra sự nhầm lẫn ít nhất khi có một hỗn hợp các giá trị lớn và nhỏ trong mảng. Bên cạnh đó, nó không có cách nào để biết giá trị trên đường (3L (một long), khi được tuần tự hóa trong JSON, trông giống hệt với 3 (một int)). Bạn chỉ cần xử lý Values và tìm kiếm bất kỳ số nào là long và trong phạm vi 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; 
    } 
}