2012-11-30 60 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