C# Json.Net将1反序列化为long类型的对象
我有一个非常简单的程序,它获取一个json blob,并将其反序列化为一个对象(用户可以自己决定结构,所以不能键入它) 当出于某种原因对它进行反序列化时,即使是小的数字也会变成长的 以下是一个例子: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 = "
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}