C# 转换为Azure移动服务的Web API未序列化所有属性

C# 转换为Azure移动服务的Web API未序列化所有属性,c#,.net,visual-studio,asp.net-web-api,azure-mobile-services,C#,.net,Visual Studio,Asp.net Web Api,Azure Mobile Services,我有一个正在工作的Web API,我正在将其转换为.Net Azure移动服务。API返回一个复杂的模型-具有属性的对象-其中一些是其他对象的集合。这在普通Web API中可以正常工作,但在Azure移动服务中,我遇到了一个问题,我的一个模型没有序列化它的所有属性 当我在控制器中的return语句上设置断点时,我看到所有属性及其值都存在。这让我相信问题在于序列化(JSON) 正在序列化的属性的示例: public Guid Id { get; set; } public IEntityDto M

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

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

正在序列化的属性的示例:

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
未序列化的属性的示例:

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值的属性。

正如@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中进行更改。

您不认为应该发布哪些属性序列化了,哪些属性没有序列化吗。或者你希望我们盲目猜测吗?我已经更新了这个问题,加入了示例属性。实际上,我只是在寻找如何调试序列化程序的指导,但您对更多信息的轻推让我注意到,所讨论的属性要么是enum,要么是null值。enum属性的值是否为enum的默认值?默认情况下,JSON序列化程序不会用默认值序列化这些字段(对象类型中的
null
)!对于正在阅读的任何人,可以通过设置来更改此行为:
HttpConfiguration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling
您是否可以将您的评论作为答案发布(并接受它),以便其他人可以从您所做的事情中学习?谢谢