如果设置为true,ASP.Net WebApi不会序列化bool

时间:2014-03-05 23:02:32

标签: json serialization asp.net-web-api json.net default-value

我有以下型号:

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始终包含此值?

1 个答案:

答案 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;