C# Odata反序列化-“长”数据类型

C# Odata反序列化-“长”数据类型,c#,json.net,odata,C#,Json.net,Odata,我有一个具有“long”数据类型的类。使用json.net反序列化通过webapi传入的包含此对象的web请求 前 公营雇员{ 长id, 字符串名 } 下面这样的请求将正确反序列化 {id:123,name:foo} 注意“id”值周围的双引号 但是像下面这样的请求无法反序列化 {id:123,name:foo} 我尝试编写一个自定义JsonConverter并重写ReadJson方法以将值转换为Int64,但没有帮助 更新: 也许我把我的问题简单化了。添加更多细节。 当类型用作odatacon

我有一个具有“long”数据类型的类。使用json.net反序列化通过webapi传入的包含此对象的web请求

公营雇员{ 长id, 字符串名 }

下面这样的请求将正确反序列化

{id:123,name:foo} 注意“id”值周围的双引号

但是像下面这样的请求无法反序列化

{id:123,name:foo}

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

更新: 也许我把我的问题简单化了。添加更多细节。 当类型用作odatacontroller方法中的参数时,我会遇到这种情况

公共类mycontroller:odatacontroller {

[HttpPost] 公共无效职位[FromBody]员工新环境管理计划 { } }

当正文为以下内容时,newEmp将接收“null”:

{id:123,name:foo}

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

{id:123,name:foo} 或 {name:foo}ie,当id被排除时


您应该得到一个很长的长度,json.net假定所有int类型都是。以下是json.net作者的评论:

默认情况下,Json.NET将整数值读取为Int64,因为没有 了解值是应为Int32还是Int64的方法,而Int64是 不太可能溢出。对于类型化属性,反序列化程序知道 将Int64转换为Int32,但因为您的属性是非类型化的 您将获得一个Int64


看起来这是故意的。当我深入modelstate的错误字典时,报告了以下错误

有效负载中必须引用“Edm.Decimal”和“Edm.Int64”类型的基本值。确保引用了该值

根据下面的SO线程,这是ODataJSON的行为


我尝试了id为123的JSON,并对JsonConvert.DeserializeObject进行了stock调用,其中Foo是定义长id属性和字符串名称属性的类。它工作得很好。请发布一个自我包含的可编译exmaple,演示您的问题。您好,更新了问题。在上面的上下文中,我无法反序列化长类型。