Разный набор полей для разных функций

Рейтинг: 0Ответов: 1Опубликовано: 20.02.2023

Есть две функции, которые обращаются к API. Одна с методом POST, вторая - PATCH.

Для обеих используется один класс, который включает поля

public class Attribute
{
    [JsonProperty]
    public string attribute_name { get; set; }
    [JsonProperty]
    public string attribute_value { get; set; }
    [JsonProperty]
    public string value { get; set; }
}

Не обращайте внимание на нейминг, я вот такой ленивый человек и просто забил на это пока.

При отправке данных в виде json с методом POST я просто собираю данные и устанавливаю контент

var content = JsonConvert.SerializeObject(attribute); // attribute - объект класса Attribute

Для обновления записи я хочу использовать тот же самый класс, но хочу исключить поле attribute_value и отправлять только value и attribute_name. Поскольку я получаю объект со всеми полями, я не могу установить свойство NullValueHandling.Ignore, поскольку оно точно будет не нулевым. Я не могу использовать [JsonIgnore], поскольку этот же самый класс используется для метода POST.

Есть готовый объект, можно ли указать поле класса, которое я хочу не включать в json при сериализации? Удалить из объекта?

Ответы

▲ 0Принят

Решил пока так

сам класс

[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
public class Attribute
{
    [JsonProperty]
    public string attribute_name { get; set; }
    [JsonProperty]
    public string? attribute_value { get; set; }
    [JsonProperty]
    public string value { get; set; }
}

и в логике обнуляю ненужное свойство

attribute.attribute_value = null;
var content = JsonConvert.SerializeObject(attribute);

На выходе имеем json без ненужной пары ключ:значение.

Кидайте помидорами, если такое решение не верно.