【问题标题】:RestSharp: How to skip serializing null values to JSON?RestSharp:如何跳过将空值序列化为 JSON?
【发布时间】:2023-04-04 12:45:01
【问题描述】:

RestSharp 的内置 JSON 序列化程序会序列化对象的所有属性,即使它们为 null 或其他默认值。我怎样才能让它跳过这些属性?

【问题讨论】:

  • Json.NET 有这样一个参数。 JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore ... 不知道 RestSharp

标签: json serialization restsharp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用自定义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();
    

    【讨论】:

    • 感谢您,但目前至少 106.1.0 的当前版本不能与当前版本的 RestSharp 一起使用,目前正在等待问题:github.com/restsharp/RestSharp/issues/1018 希望一旦解决,这将再次起作用,或者至少是某些东西非常相似。
    • @JamesEby 这是不正确的。此解决方案仍然有效,与您提到的问题无关。我发布的解决方案直接在 RestSharp 使用的静态 SimpleJson 类上配置序列化器策略,因此不受 RestSharp 中有限的配置选项的影响。在官方文档中甚至提到可以像这样自定义序列化器策略(在本页底部):github.com/restsharp/RestSharp/wiki/Deserialization
    • 我的意思是代码中不再存在静态类,或者至少它似乎已被删除。截至最新版本,我在 RestSharp 中找不到这样的 SimpleJson 配置类。如果我错了,但你仍然看到它,请告诉我。
    • @JamesEby 它仍然存在,但它的命名空间似乎在 106.1.0 中发生了变化。在早期版本中,它位于 RestSharp 命名空间中,而现在它似乎位于 SimpleJson 命名空间中。我会更新我的答案以反映这一点。感谢您指出!
    • SimpleJson 已移回 RestSharp 命名空间。
    【解决方案3】:

    这是一个已修改为忽略空值的版本的链接。您只需将序列化程序选项设置为忽略空值。

    Restsharp that ignores null values

    【讨论】:

    • 似乎不再工作 - request.JsonSerializer 没有 Options 属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多