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的属性.
正如@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中进行.
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |