【问题标题】:Set JsonSerializerSettings Per Response?为每个响应设置 JsonSerializerSettings?
【发布时间】:2012-11-19 02:33:58
【问题描述】:

我有一个 MVC 4 Web API。通常我希望响应返回所有属性,但有一个地方我只想返回非空值。我可以通过设置全局文件中GlobalConfiguration.Configuration 实例的Formatters.JsonFormatter.SerializerSettings.NullValueHandling 的JsonSerializerSettings 来设置任一行为,但我想根据响应同时使用这两种行为。有没有一种简单的方法可以从 API 控制器操作中配置请求范围?

【问题讨论】:

    标签: asp.net-mvc json asp.net-web-api


    【解决方案1】:

    这可能会更容易在客户端使用像 javascript 这样的动态语言来完成。

    var keys = Object.keys(json);
    for(var i = 0; i < keys.length; i++) {
        var propertyName = keys[i];
        if(json[propertyName] === undefined || v[propertyName] === null) {
               json.remove(propertyName);
        }
    }
    return json;
    

    【讨论】:

    • 这甚至没有必要。在这种情况下,我只是想剔除通过慢速连接发送的大量数据。
    • 除此之外,我可以想象将来想要更改其他不太容易在客户端上执行的序列化选项。
    【解决方案2】:

    通过将控制器操作更改为返回 HttpResponseMessage,您可以更好地控制特定操作的内容返回方式。例如

    public HttpResponseMessage Get() {
       var foo = new Foo();
    
       var objectContent = new ObjectContent<Foo>(foo, new JsonFormatter()
                                    {SerializerSettings.NullValueHandling = ???})
    
        return new HttpResponseMessage() {Content = objectContent};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 2015-05-02
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2012-10-27
      相关资源
      最近更新 更多