XML Serializer делает, но Json Serializer не Serialize Action метод возврата тип - PullRequest
0 голосов
/ 31 мая 2018

Я работаю над webApi 2, где я использую EF 6 (DB-First) в качестве доступа к данным.У меня так много сущностей в моем файле * .edmx, и я хочу использовать их в качестве возвращаемых типов моих методов webApi.

когда я использую настройки по умолчанию, выходные данные сериализуются с помощью XML Serializer, но когда я меняю сериализатор по умолчанию на Json Serializer, добавляя эти строки (в WebApiConfig.cs):

 GlobalConfiguration.Configuration.Formatters.Clear();
 GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

это простовозвращает Id : "1".я попробовал эти строки также:

 var json = config.Formatters.JsonFormatter;
 json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
 json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
 config.Formatters.Remove(config.Formatters.XmlFormatter);

он имеет такие же результаты.единственным подходящим подходом для меня было использование JavaScriptSerializer.но это делает мой WebApi непредсказуемым для других разработчиков, потому что он просто возвращает String значения.Я использую JavaScriptSerializer следующим образом:

 public string Method(){
 JavaScriptSerializer js = new JavaScriptSerializer();
 // ....
 return js.Serialize(Datas);}

Существует ли какой-либо применимый подход для автоматической сериализации объекта EF в Json в WebApi 2?

1 Ответ

0 голосов
/ 01 июня 2018

GlobalConfiguration.Configuration.Formatters.Clear ();GlobalConfiguration.Configuration.Formatters.Add (new JsonMediaTypeFormatter ());

Эти две строки явно означают, что независимо от того, что ваш веб-API отправляет в ответ, он всегда будет в формате формата Json.

он просто возвращает Id: "1"

Почему это не так?это допустимый Json.

json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

Эти два значения не имеют отношения к текущему контексту.

Я использую JavaScriptSerializer следующим образом:

Сериализация всегда даст вам только строку.

Существует ли какой-либо применимый подход для автоматической сериализации объекта EF в Json в WebApi 2?

Сделайте ваш возвращаемый тип как EF Object Type.и позвольте WEB API форматировать медиа-тип как Json.Или разрешите возвращаемый тип Dynamic, если вы не хотите указывать, и в теле возвращайте любой тип объекта, который вы хотите. Веб-API выдаст вам в формате Json

...