Веб-API, преобразованный в мобильную службу Azure, не сериализует все свойства
У меня есть работающий веб-API, который я конвертирую в мобильную службу.Net Azure. API возвращает сложную модель - объекты со свойствами - некоторые из которых являются коллекциями других объектов. Это работает, как и ожидалось, с простым веб-API, но с мобильными службами Azure у меня возникла проблема, когда у одной из моих моделей не все сериализованные свойства.
Когда я устанавливаю точку останова в операторе возврата в контроллере, я вижу, что все свойства и их значения присутствуют. Это приводит меня к мысли, что проблема заключается в сериализации (JSON).
return Request.CreateResponse(HttpStatusCode.OK, myModel);
Примеры свойств, которые сериализуются:
public Guid Id { get; set; }
public IEntityDto ModelDto { get; set; } //this is an object with many properties all of which serialize
Примеры свойств, которые НЕ сериализуются:
public ItemStatus Status { get; set; } //this is an enum
public string Message { get; set; }
public string TestProp { get; set; } //this is a simple string property I added to help debug
Как я могу продолжить отладку, чтобы понять, почему эти свойства исключены?
Примечание. В настоящий момент я все еще работаю на локальном компьютере, а не в Azure. Это с Visual Studio 2013 Обновление 2 RTM.
ОБНОВЛЕНИЕ: При ближайшем рассмотрении оказывается, что свойства, которые не сериализуются, являются свойствами, которые являются либо перечислениями, либо имеют значение null.
1 ответ
Как упомянул @carlosfigueira в комментарии к исходному вопросу, поведение сериализатора JSON по умолчанию заключается в исключении свойств со значениями NULL и значениями по умолчанию. Для решения этой проблемы я изменил следующие настройки:
httpConfig.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
httpConfig.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include;
...где httpConfig
имеет тип HttpConfiguration
, Вы можете внести эти изменения при запуске приложения - в файле конфигурации, таком как WebApiConfig.cs или непосредственно в Global.asax.cs.