Web API 2 - 返回JSON,不包括false属性

时间:2013-09-06 12:32:11

标签: json asp.net-web-api

在发出REST请求时返回的JSON一切正常,除了任何bool属性,如果为false,则不包含在JSON中(通过Fiddler验证)。我试过了:

[DataMember(IsRequired = true)]
        public bool success { get; set; }

但它仍未归还。

有什么建议吗?而且我确实认为它不会为nulls返回任何内容,它只是bool我想要总是返回。

WebApiConfig.cs:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        config.MapHttpAttributeRoutes();

        config.Formatters.XmlFormatter.UseXmlSerializer = true;
        config.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate;
        config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
    }
}

DatasourceController.cs:

public class DatasourceController : ApiController
{

    [HttpGet("datasource/metadata/{datasource}")]
    public MetaDataInfo GetDatasourceSchema(string datasource, string node = "")
    {
        DocumentInfo docInfo = DocumentData.GetDocInfo("dave");
        return MetaDataFactory.GetMetaDataInfo(docInfo, datasource, node);
    }
}

2 个答案:

答案 0 :(得分:0)

我认为通过将[DefaultValue(false)]属性置于您的success变量和其他bool变量之上,您应该得到所需的结果。

您已将DefaultValueHandling设为Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate。从文档中我们可以阅读:

  

在序列化对象时忽略成员值与成员的默认值相同的成员,并在反序列化时将成员设置为默认值。

当我读到它意味着在序列化期间你的假布尔值应该消失。但是,只要它具有默认值,当您反序列化时它将再次出现在JSON中。

答案 1 :(得分:0)

我一直在寻找相同的信息。 事实证明你使用了can specify for a specific属性:

[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]

我在ASP.NET Core 1 RC2上测试过。 那是MVC 6。