【问题标题】:ASP.Net WebApi is not serializing bool if set to true如果设置为 true,ASP.Net WebApi 不会序列化 bool
【发布时间】:2014-03-05 23:02:31
【问题描述】:

我有以下型号:

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 中查看 IsFolder 和 IsImage 设置为 false 时,json 中缺少 IsFolder 和 IsImage。当它们设置为 true 时,它​​们显示得很好。

我怀疑这是因为 .Net 认为 true 是默认值,并排除了与默认值相同的字段。

无论如何,我如何告诉 .Net 始终包含此值?

【问题讨论】:

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


    【解决方案1】:

    WebApiConfig 类的Register 方法中(位于App_Start 文件夹中)尝试添加以下行:

    config.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling =
                                       Newtonsoft.Json.DefaultValueHandling.Include;
    

    这应该强制 Web Api 包含默认值(如果还没有)。

    编辑

    如果您使用的是没有 WebApiConfig 的旧版 Web API,您也可以在 Global.asax.cs 中的 Application_Start 方法中执行此操作:

    var config = GlobalConfiguration.Configuration;
    var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
    jsonSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
    

    【讨论】:

    • 看来我没有 WebApiConfig 类。我该如何添加这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多