2

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

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

但它仍然没有返回它。

有什么建议么?而且我确实喜欢它不会为空值返回任何内容,它只是我希望始终返回的布尔值。

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;
    }
}

数据源控制器.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);
    }
}
4

2 回答 2

0

我认为通过将[DefaultValue(false)]属性放在success变量和其他布尔变量之上,你应该得到你想要的结果。

您已设置DefaultValueHandlingNewtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate. 从文档中我们可以读到:

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

正如我所读到的,这意味着在序列化您的错误布尔值期间应该消失。但是,只要它有一个默认值,它就会在您反序列化时再次出现在 JSON 中。

于 2013-09-06T13:48:40.623 回答
0

我正在寻找相同的信息。事实证明,您可以使用以下命令指定特定属性:

[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]

我已经在 ASP.NET Core 1 RC2 上进行了测试。这就是 MVC 6。

于 2016-05-31T17:31:48.713 回答