Web API转换为Azure移动服务而不是序列化所有属性

use*_*640 3 .net c# visual-studio asp.net-web-api azure-mobile-services

我有一个工作的Web API,我正在转换为.Net Azure移动服务.API返回一个复杂的模型 - 具有属性的对象 - 其中一些是其他对象的集合.这与普通的Web API一样正常,但是使用Azure移动服务我遇到了一个问题,即我的某个模型没有将其所有属性序列化.

当我在控制器的return语句中设置断点时,我看到所有属性及其值都存在.这让我相信问题在于序列化(JSON).

return Request.CreateResponse(HttpStatusCode.OK, myModel);
Run Code Online (Sandbox Code Playgroud)

正在序列化的属性示例:

public Guid Id { get; set; }
public IEntityDto ModelDto { get; set; } //this is an object with many properties all of which serialize
Run Code Online (Sandbox Code Playgroud)

未序列化的属性示例:

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
Run Code Online (Sandbox Code Playgroud)

我怎样才能进一步调试这个,以便我可以看到为什么要排除这些属性?

注意:目前我仍在本地运行,而不是在Azure上运行.这是使用Visual Studio 2013 Update 2 RTM.

更新:仔细检查后,似乎未序列化的属性是枚举或值为null的属性.

use*_*640 5

正如@carlosfigueira在对原始问题的评论中提到的,JSON序列化程序的默认行为是排除具有null和默认值的属性.为了解决这个问题,我更改了以下设置:

  httpConfig.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
  httpConfig.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include;
Run Code Online (Sandbox Code Playgroud)

...... httpConfig类型在哪里HttpConfiguration.您可以在应用程序启动时进行这些更改 - 在WebApiConfig.cs之类的配置文件中或直接在Global.asax.cs中进行.