2013-11-15 38 views
12

RestSharp的內置JSON序列化程序會序列化所有對象的屬性,即使它們爲空或默認值。我怎樣才能讓它跳過這些屬性?RestSharp:如何跳過將空值序列化爲JSON?

+1

Json.NET有這樣一個參數。 'JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore' ...不知道關於RestSharp – thenewseattle

回答

5

另外,您也可以使用其他的JSON庫(json.net,servicestack.text等)支持忽略空值,第一序列化:

RestRequest request = new RestRequest(); 
... 
string jsonString = ThirdPartySerialization(jsonObject); 
request.AddParameter("application/json", jsonString, ParameterType.RequestBody); 
3

您可以使用自定義IJsonSerializerStrategy以及默認的SimpleJson JSON序列化程序忽略空值。

最簡單的方法就是像下面這樣擴展PocoJsonSerializerStrategy

public class IgnoreNullValuesJsonSerializerStrategy : SimpleJson.PocoJsonSerializerStrategy 
{ 
    protected override bool TrySerializeUnknownTypes(object input, out object output) 
    { 
     bool returnValue = base.TrySerializeUnknownTypes(input, out output); 

     if (output is IDictionary<string, object> obj) 
     { 
      output = obj.Where(o => o.Value != null).ToDictionary(o => o.Key, o => o.Value); 
     } 

     return returnValue; 
    } 
} 

然後將其用作默認的序列化器策略。

SimpleJson.SimpleJson.CurrentJsonSerializerStrategy = new IgnoreNullValuesJsonSerializerStrategy(); 
+0

感謝這一點,但目前沒有使用當前版本的RestSharp,至少106.1.0,目前正在等待問題: https:// github。 com/restsharp/RestSharp/issues/1018 希望一旦解決了這個問題,將會再次起作用,或者至少是非常相似的東西。 –

+0

@JamesEby不正確。該解決方案仍然有效,與您提到的問題無關。 我發佈的解決方案直接在RestSharp使用的靜態SimpleJson類上配置串行器策略,因此不會受到RestSharp中有限配置選項的影響。 甚至在官方文檔中提到,可以像這樣自定義序列化策略(在本頁的底部):https://github.com/restsharp/RestSharp/wiki/Deserialization – Conyc

+0

我在說的是該代碼中不再存在該靜態類,或者至少它似乎已被刪除。在最新版本中,我沒有在RestSharp中找到這樣的SimpleJson配置類。如果我錯了,你仍然看到它,請讓我知道。 –

相關問題