【发布时间】:2014-08-16 17:50:47
【问题描述】:
我刚刚将一个 MVC4/WebApi v1 应用程序更新为 MVC5 + WebAPI2..
似乎在这次升级之后,Json.Net 序列化程序将不再为使用 OData $expand 方法的请求包含正确的 $type。请参阅下面的示例,了解我的意思...
正确:
请求:http://url.com/api/Studies/277/Sites
回复:
{
$id: "1"
$type: "LGCYDAPI.Domain.Model.StudySiteWithContacts, LGCYDAPI.Domain.Model"
Contacts: [
{
$id: "2"
$type: "LGCYDAPI.Domain.Model.ContactRelatedToSite, LGCYDAPI.Domain.Model"
ContactID: -38445
}],
SiteID: 38445
}
不正确:
请求:http://url.com/api/Studies/277/Sites?$expand=联系人
回复:
{
$id: "1"
$type: "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib"
Contacts: [
{
$id: "2"
$type: "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib"
ContactID: -38445
}],
SiteID: 38445}
连同 MVC 和 WebAPI 程序集,我将 JSON.NET 从 5.0.6 更新到 6.0.3,我认为这是问题所在。但是,我恢复到 v5 并没有解决问题,所以我回到 v6。还更新了 OData nuget - 我当前的版本是 Microsoft.Data.OData=5.6.0 和 Microsoft.AspNet.WebApi.OData=5.1.2。
JSON 序列化程序设置:
pConfiguration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
pConfiguration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
pConfiguration.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Objects;
pConfiguration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
【问题讨论】:
标签: json asp.net-web-api json.net odata