【发布时间】:2015-09-18 00:43:07
【问题描述】:
向使用 Json.NET 进行反序列化的 WebApi2 控制器发送带有已确认对象的 POST 请求时,未正确解析单个属性。
请求中发出的JSON如下:
{"ParentId":8,"Data":{"Description":"Estimated Man Hours ONSITE","ExternalItemKey":"Services:Man Hours","Quantity":0,"Price":150,"EstimatedCost":60},"ActualCost":60,"DateProvided":"2015-09-18T00:26:45.000Z","ReferencedQuotedDeliverableExternalGuid":"1b7e42be-670e-4d84-9600-15dff530363e","Notes":""}
Data.EstimatedCost 值反序列化为 0,可能是因为某些原因它没有被解析。所有其他值均已正确解析。
Json.NET 的版本是 6.0.0.0
【问题讨论】:
-
在您的 JSON 中,
ActualCost属性不是data对象的一部分;它是包含对象的一部分。 (另一方面,EstimatedCost,is 是数据对象的一部分。)您没有在问题中显示您的课程,但我怀疑这是您真正的问题。很多时候,如果您使用像 jsonlint.com 这样的 JSON 验证器来重新格式化 JSON,它会有所帮助。通过这种方式,哪些属性属于哪些对象变得更加明显。 -
这是我的错字。它应该是“The Data.Estimated Cost value...” 感谢您指出!问题是 6.0.0.0 版本中的 JSON.NET 反序列化程序有一个错误。我提供此 Q/A 主要是为遇到相同问题的其他人提供解决方法。该错误可能会在以后的版本中得到修复,但如果您没有时间/手段更换库,那么解决方法很有用。
-
我明白了;感谢您更新您的问题以澄清。
标签: c# .net post json.net asp.net-web-api2