Web API转换为Azure移动服务,没有序列化所有属性

本文关键字:序列化 属性 服务 转换 API Azure 移动 Web | 更新日期: 2023-09-27 18:09:08

我有一个工作的Web API,我正在转换到。net Azure移动服务。API返回一个复杂的模型——带有属性的对象——其中一些是其他对象的集合。这与普通Web 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 Update 2 RTM。

UPDATE:经过仔细检查,发现未被序列化的属性是枚举或值为null的属性。

Web API转换为Azure移动服务,没有序列化所有属性

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

  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中进行这些修改。