我有以下型号:
public class DocumentViewModel
{
public long Id { get; set; }
public long? ParentFolderId { get; set; }
public bool IsFolder { get; set; }
public bool IsImage { get; set; }
}
以及以下API控制器:
public HttpResponseMessage GetChildren(long jobId, long folderId)
{
using (var model = DatabaseHelper.GetModel())
{
var accessLevel = MembershipHelper.GetLoggedInAccessLevel(model);
List<DocumentViewModel> documents = DocumentHelper.GetDocumentsForMobile(model, jobId, folderId, accessLevel).ToList();
return this.Request.CreateResponse(
HttpStatusCode.OK,
new { data = documents });
}
}
问题是当我在Fiddler中将它们设置为false时,json中缺少IsFolder和IsImage。当它们设置为真时,它们会显示出来。
我怀疑这是因为.Net认为true是默认值,并且排除了值与默认值相同的字段。
如何判断.Net始终包含此值?
答案 0 :(得分:4)
在Register
类的WebApiConfig
方法中(位于App_Start
文件夹中)尝试添加以下行:
config.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling =
Newtonsoft.Json.DefaultValueHandling.Include;
这应该强制Web Api包含默认值(如果尚未包含)。
修改强>
如果您使用的是没有WebApiConfig的旧版Web API,您也可以使用Application_Start
中的Global.asax.cs
方法执行此操作:
var config = GlobalConfiguration.Configuration;
var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;