2016-07-24 15 views
0

Я пытаюсь перенести приложение мобильного сервиса в веб-приложение. Для этого я создал новое веб-приложение и скопировал соответствующий код из рабочей мобильной службы в новое веб-приложение, которое я создал (используя шаблон мобильного приложения.
У меня есть следующий код в моем методе запуска в новом приложении:Исключительный цикл привязки для свойства в веб-приложении

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. Как я могу заставить это веб-приложение принимать значения форматирования?

+1

Это дубликат [Azure Mobile App, настраивающий сериализацию json] (https://stackoverflow.com/questions/36941834/azure-mobile-app-customizing-json-serialization)? – dbc

+1

В качестве альтернативы вы можете добавлять атрибуты к своим классам напрямую, например [JsonPropertyAttribute.ItemIsReference] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonPropertyAttribute_ItemIsReference.htm), чтобы принудительно использовать 'PreserveReferencesHandling' для элементов коллекции. – dbc

+2

Благодарим вас за полезные комментарии. Спасибо @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/ –

ответ

0

приветствую вас за полезные замечания. Спасибо @dbc за то, что он указал мне на этот вопрос. Я провел 3 дня и не нашел его. По-видимому, я был прав, что мобильное приложение игнорирует json formatters. Вы позволили мне на этот пост [json net error]. Добавляем атрибут [JsonObject (IsReference = true)] перед тем, как DTO решили проблему с минимальным кодом. [json net error]: stackoverflow.com/questions/7397207/... - Haim Katz 24 июля в 13:41

+0

согласно запросу для чернильниц –