RestSharp:如何跳过将空值序列化为JSON?

Bry*_*yan 15 serialization json restsharp

RestSharp的内置JSON序列化程序序列化了对象的所有属性,即使它们为null或者是默认值.如何让它跳过这些属性?

小智 7

另一种方法是,您可以使用其他支持忽略空值的json库(json.net,servicestack.text等)来首先序列化它:

RestRequest request = new RestRequest();
...
string jsonString = ThirdPartySerialization(jsonObject);
request.AddParameter("application/json", jsonString, ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)


Con*_*nyc 5

您可以将自定义项IJsonSerializerStrategy与默认的SimpleJsonJSON序列化程序一起使用,以忽略空值。

最简单的方法是扩展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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其用作默认的序列化程序策略。

SimpleJson.SimpleJson.CurrentJsonSerializerStrategy = new IgnoreNullValuesJsonSerializerStrategy();
Run Code Online (Sandbox Code Playgroud)

  • @JamesEby它仍然存在,但似乎其名称空间在106.1.0中已更改。在早期版本中,它位于“ RestSharp”名称空间中,而现在似乎位于“ SimpleJson”名称空间中。我将更新我的答案以反映这一点。感谢您指出! (2认同)

Geo*_*rge 0

以下是已修改为忽略空值的版本的链接。您只需将序列化器选项设置为忽略空值即可。

Restsharp 忽略空值

  • 似乎不再起作用 - request.JsonSerializer 没有 Options 属性 (3认同)