Odata反序列化 - 'long'数据类型

时间:2014-08-11 23:51:38

标签: c# json.net odata

我有一个'long'数据类型的类。使用json.net反序列化包含此对象的Web请求(通过webapi进入)。

实施例。

  

公共班员工{
       长id,
       字符串名称
     }

如下所示的请求正确反序列化,

  

{ “ID”: “123”, “姓名”: “foo” 的}   
  (注意'id'值附近的双引号)

但是下面的请求无法反序列化,

  

{ “ID”:123, “姓名”: “foo” 的}

我尝试编写自定义JsonConverter并重写ReadJson方法将值转换为Int64,但它没有帮助。


更新: 可能是我过分简化了我的问题。添加更多细节。 当类型被用作odatacontroller的方法

中的参数时,我遇到了这种情况
  

public class mycontroller:odatacontroller
  {

     
    

[HttpPost]
        public void Post([FromBody] Employee newEmp)
      {
        }
    }

  
当正文为:

时,收到newEmp的

'null'

  

{ “ID”:123, “姓名”: “foo” 的}

我为body获取了一个有效的newEmp对象:

  

{ “ID”: “123”, “姓名”: “foo” 的}   或
  {“name”:“foo”}(即,当排除id时)

2 个答案:

答案 0 :(得分:2)

看起来这是设计的。当我深入了解模型状态的错误字典时,会报告以下错误。

类型' Edm.Decimal'的原始值。和' Edm.Int64'必须在有效载荷中引用。确保引用该值

根据以下SO线程,这是odata json的行为。

WinJS 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。