数据反序列化- 'long'数据类型
本文关键字:数据类型 long 反序列化 数据 | 更新日期: 2023-09-27 18:17:37
我有一个'long'数据类型的类。使用json.net来反序列化包含此对象的web请求(通过webapi传入)。
交货。
公共类Employee{
长id,
字符串名称
}
像下面这样的请求正确地反序列化,
{" id ": " 123 ", "名称":" foo "}
(注意'id'值周围的双引号)
但是像下面这样的请求无法反序列化,
{" id ": 123,"名字":"foo"}
我试着写一个自定义的JsonConverter和重写ReadJson方法将值转换为Int64,但它没有帮助。
更新:也许我的问题过于简单化了。添加更多细节。当类型被用作odata控制器方法
公共类mycontroller: odatcontroller
{[HttpPost]
public void Post([FromBody] Employee newEmp)
{
}
}
当body为
时,接收到newEmp的'null'{" id ": 123,"名字":"foo"}
我得到一个有效的newEmp对象为主体,如:
{" id ": " 123 ", "名称":" foo "}或
{"name":"foo"}(即不包括id)
看起来这是经过设计的。当我挖掘modelstate的错误字典时,报告了以下错误。
类型为"Edm"的原始值。十进制'和'Edm。在有效载荷中必须引用Int64'。确保值是引号
根据下面的SO线程,这是odata json的行为。
WinJS data JSON
你应该得到一个很长的,因为json.net假设所有int类型都是Int64。这里是json.net的作者在回应某人要求Int32的评论:
Json。. NET默认将整数值读取为Int64,因为没有Int64方法知道值应该是Int32还是Int64, Int64是不太可能溢出。对于类型化属性,反序列化器知道将Int64转换为Int32,但因为您的属性是未类型化的你得到的是Int64。