2012-11-30 96 views
0

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

回答

2

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

public HttpResponseMessage Get() { 
    var foo = new Foo(); 

    var objectContent = new ObjectContent<Foo>(foo, new JsonFormatter() 
           {SerializerSettings.NullValueHandling = ???}) 

    return new HttpResponseMessage() {Content = objectContent}; 
} 
0

这可能会更容易做在客户端与动态语言,如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; 
+0

这甚至没有必要。在这种情况下,我只是想通过慢速连接来发送大量的数据。 – Paul

+1

除此之外,我可以想象在未来更改其他序列化选项,而这些选项在客户端并不那么容易实施。 – Paul