我有一个'long'数据类型的类。使用json.net反序列化包含此对象的Web请求(通过webapi进入)。
实施例。
公共班员工{
长id,
字符串名称
}
如下所示的请求正确反序列化,
{ “ID”: “123”, “姓名”: “foo” 的}
(注意'id'值附近的双引号)
但是下面的请求无法反序列化,
{ “ID”:123, “姓名”: “foo” 的}
我尝试编写自定义JsonConverter并重写ReadJson方法将值转换为Int64,但它没有帮助。
更新:
可能是我过分简化了我的问题。添加更多细节。
当类型被用作odatacontroller的方法
当正文为:时,收到newEmp的public class mycontroller:odatacontroller
{
[HttpPost]
public void Post([FromBody] Employee newEmp)
{
}
}
'null'
{ “ID”:123, “姓名”: “foo” 的}
我为body获取了一个有效的newEmp对象:
{ “ID”: “123”, “姓名”: “foo” 的} 或
{“name”:“foo”}(即,当排除id时)
答案 0 :(得分:2)
看起来这是设计的。当我深入了解模型状态的错误字典时,会报告以下错误。
类型' Edm.Decimal'的原始值。和' Edm.Int64'必须在有效载荷中引用。确保引用该值
根据以下SO线程,这是odata json的行为。
答案 1 :(得分:1)
你应该得到很长时间,json.net假设所有int类型都是Int64。这是json.net in response to somebody asking for an Int32的作者的评论:
默认情况下,Json.NET将整数值作为Int64读取,因为没有 知道值是Int32还是Int64,以及Int64的方法 不太可能溢出。对于类型化属性,反序列化器知道 将Int64转换为Int32,但因为您的属性是无类型的 你得到一个Int64。