RestSharp内置的JSON序列化程序会序列化对象的所有属性,即使它们为空或者是默认值。我该如何使其跳过这些属性?
RestSharp内置的JSON序列化程序会序列化对象的所有属性,即使它们为空或者是默认值。我该如何使其跳过这些属性?
作为替代方案,您可以使用其他支持忽略 null 值进行序列化的 JSON 库(json.net、servicestack.text 等)先对其进行序列化:
RestRequest request = new RestRequest();
...
string jsonString = ThirdPartySerialization(jsonObject);
request.AddParameter("application/json", jsonString, ParameterType.RequestBody);
您可以使用自定义的IJsonSerializerStrategy
与默认的SimpleJson
JSON序列化器一起忽略空值。
最简单的方法是扩展PocoJsonSerializerStrategy
,如下所示。
public class IgnoreNullValuesJsonSerializerStrategy : 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.CurrentJsonSerializerStrategy = new IgnoreNullValuesJsonSerializerStrategy();
这里有一个链接,指向已经修改过以忽略空值的版本。你只需要设置序列化选项来忽略 null 值。
JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
...不确定RestSharp是否有类似的功能。 - thenewseattle