如何将整数反序列化为int,而不是长?

Igo*_*tin 8 c# json.net deserialization

我正在使用Json.NET在服务器端反序列化请求.

有类似的东西

public object[] Values
Run Code Online (Sandbox Code Playgroud)

我需要把像价值观30.0,27,54.002,和他们需要double的和int的.

Json.NET有一个名为FloatParseHandling的反序列化属性,但没有像IntParseHandling这样的选项.所以问题是如何将整数反序列化int

Mar*_*ell 9

最好的办法是反序列化到一个类型化的模型,其中模型表示Values是一个int/ int[]/等.在一些情况下object/ object[](大概是因为类型事先不出名,或者它是一个数组因此,JSON.NET默认为不合理long,因为当数组中存在大小值混合时,这将导致最少的混淆.除此之外,它无法知道路上的值是什么(3L(a long),在JSON中序列化时,看起来与3(an int)相同).你可以简单地进行后处理Values,并寻找任何是long与在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;
    }
}
Run Code Online (Sandbox Code Playgroud)