Подтвердить что ты не робот

RestSharp: Как пропустить сериализацию нулевых значений в JSON?

Встроенный сериализатор JSON для RestSharp сериализует все свойства объекта, даже если они имеют значение null или иное значение по умолчанию. Как я могу пропустить эти свойства?

4b9b3361

Ответ 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 : 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();

Ответ 3

Вот ссылка на версию, которая была изменена для игнорирования нулевых значений. Вам просто нужно установить параметры serializer для игнорирования нулей.

Restsharp, игнорирующий нулевые значения

Ответ 4

Вы можете использовать [JsonPropertyAttribute] для свойств, которые вы хотите, чтобы сериализатор генерировал нулевые значения для использования NullValueHandling, установленного в Игнорировать:

[JsonProperty("email", NullValueHandling = NullValueHandling.Ignore)]
public string Email { get; set; }