Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json.Net将1反序列化为long类型的对象_C#_Json.net_Json Deserialization - Fatal编程技术网

C# Json.Net将1反序列化为long类型的对象

C# Json.Net将1反序列化为long类型的对象,c#,json.net,json-deserialization,C#,Json.net,Json Deserialization,我有一个非常简单的程序,它获取一个json blob,并将其反序列化为一个对象(用户可以自己决定结构,所以不能键入它) 当出于某种原因对它进行反序列化时,即使是小的数字也会变成长的 以下是一个例子: using System.Collections.Generic; using Newtonsoft.Json; public class Jsontest { public static void testJson() { var simpleString = "

我有一个非常简单的程序,它获取一个json blob,并将其反序列化为一个对象(用户可以自己决定结构,所以不能键入它)

当出于某种原因对它进行反序列化时,即使是小的数字也会变成长的

以下是一个例子:

using System.Collections.Generic;
using Newtonsoft.Json;

public class Jsontest
{
    public static void testJson()
    {
        var simpleString = "[{\"name\":\"Item 1\",\"check\":1,\"num\":2}]";

        var list = new List<CustomObj>();

        list.AddRange(JsonConvert.DeserializeObject<IEnumerable<CustomObj>>(simpleString));

        return list;
    }
}

public class CustomObj
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonExtensionData]
    public IDictionary<string, object> PropertyValues { get; set; }
}
使用System.Collections.Generic;
使用Newtonsoft.Json;
公共类Jsontest
{
公共静态void testJson()
{
var simpleString=“[{\'name\':\'Item 1\',\'check\':1,\'num\':2}]”;
var list=新列表();
AddRange(JsonConvert.DeserializeObject(simpleString));
退货清单;
}
}
公共类CustomObj
{
[JsonProperty(“名称”)]
公共字符串名称{get;set;}
[JsonExtensionData]
公共IDictionary属性值{get;set;}
}
当点击返回断点时,我得到以下数据: (为糟糕的视觉效果道歉,也显示)

PropertyValues Count=2 System.Collections.Generic.IDictionary{System.Collections.Generic.Dictionary}
-[0]{[check,1]}System.Collections.Generic.KeyValuePair
键“检查”字符串
值1对象{long}
-[1]{[num,2]}System.Collections.Generic.KeyValuePair
键“num”字符串
值2对象{long}

这个数据在另一个程序集中使用,我希望它是一个int,但它看起来一样长。你知道我做错了什么吗?

你为什么期望整数?您没有指定wan名为
check
的属性,该属性包含
int
。JSON本身没有指定数字类型
long
是整数值的最佳选项。这是它经常做的事情,请参阅。如果要更改类型,请使用自定义转换器、使用类反序列化或完全更改您的方法(可能将JSON对象映射到您自己的类)。感谢您的澄清,发布的链接@CodeCaster真的很有帮助!将不得不稍微改变我的方法。如前面链接中所述,这是设计意图:在执行非类型化反序列化时,Newtonsoft总是将JSON整数反序列化为
long
。也许在这里也有帮助。和这两个的复制品一样接近?你为什么期望整数?您没有指定wan名为
check
的属性,该属性包含
int
。JSON本身没有指定数字类型
long
是整数值的最佳选项。这是它经常做的事情,请参阅。如果要更改类型,请使用自定义转换器、使用类反序列化或完全更改您的方法(可能将JSON对象映射到您自己的类)。感谢您的澄清,发布的链接@CodeCaster真的很有帮助!将不得不稍微改变我的方法。如前面链接中所述,这是设计意图:在执行非类型化反序列化时,Newtonsoft总是将JSON整数反序列化为
long
。也许在这里也有帮助。像那两个的复制品一样接近?
PropertyValues  Count = 2   System.Collections.Generic.IDictionary<string, object> {System.Collections.Generic.Dictionary<string, object>}
-   [0] {[check, 1]}    System.Collections.Generic.KeyValuePair<string, object>
        Key "check" string
        Value   1   object {long}
-   [1] {[num, 2]}  System.Collections.Generic.KeyValuePair<string, object>
        Key "num"   string
        Value   2   object {long}