Я пытаюсь перенести приложение мобильного сервиса в веб-приложение. Для этого я создал новое веб-приложение и скопировал соответствующий код из рабочей мобильной службы в новое веб-приложение, которое я создал (используя шаблон мобильного приложения.
У меня есть следующий код в моем методе запуска в новом приложении:Исключительный цикл привязки для свойства в веб-приложении
public partial class Startup
{
public static void ConfigureMobileApp(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.UseDefaultConfiguration()
.ApplyTo(config);
// Use Entity Framework Code First to create database tables based on your DbContext
Database.SetInitializer(new MobileServiceInitializer());
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
app.UseWebApi(config);
MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings();
}
}
в config.Formatters были скопированы из исходного приложения, которое возвращает объект и его потомков к выходу JSon контроллера апи.
в новом приложении я должен был добавить [MobileAppController], чтобы мои api-контроллеры. Я получаю следующую ошибку от контроллера в приложении для веб-приложений: Self-референтный цикл, обнаруженный для свойства Tea мс (Модель команды -> Игроки и игроки есть TeamID)
На основе этого подробного вопроса: Self referencing loop detected - Getting back data from WebApi to the browser
Приведенный выше код должен работать, как это делает в моем мобильном приложении сервиса. Приложение веб-службы, похоже, игнорирует значение config.Formatters, поскольку я пробовал каждое значение в вышеуказанном вопросе, но я все равно получаю ту же ошибку.
Если я поместил атрибут [JSON Ignore] перед списком Child, то я не получу ошибку, но также не верну детей в json. Как я могу заставить это веб-приложение принимать значения форматирования?
Это дубликат [Azure Mobile App, настраивающий сериализацию json] (https://stackoverflow.com/questions/36941834/azure-mobile-app-customizing-json-serialization)? – dbc
В качестве альтернативы вы можете добавлять атрибуты к своим классам напрямую, например [JsonPropertyAttribute.ItemIsReference] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonPropertyAttribute_ItemIsReference.htm), чтобы принудительно использовать 'PreserveReferencesHandling' для элементов коллекции. – dbc
Благодарим вас за полезные комментарии. Спасибо @dbc за то, что он указал мне на этот вопрос. Я провел 3 дня и не нашел его. По-видимому, я был прав, что мобильное приложение игнорирует json formatters. Вы позволили мне опубликовать сообщение [json net error]. Добавляем атрибут [JsonObject (IsReference = true)] перед тем, как DTO решили проблему с минимальным кодом. [json net error]: http: //stackoverflow.com/questions/7397207/json-net-error-self-referencing-loop-detected-for-type/ –