Сериализация объектов с меньшим количеством свойств
Есть список объектов абстрактного класса. Сам этот класс менять не могу, так как он пренадлежит пакету из Nuget. Этот класс имеет 10 свойств.
Хочу этот список сериализовать например с помощью JsonSerializer в строку, но сохраняя объекты с 3 свойствами из 10.
Знаю что могу перебрать этот список создав список с каким то мини классом и потом сериализовать.
А есть какой то вариант изящнее ?
Для примера (GPT создал):
public abstract class CarBase
{
public abstract bool IsAvailable { get; }
public virtual bool IsElectric => false;
public bool IsLuxury => !IsAvailable;
public virtual string Manufacturer { get; }
public virtual int Year { get; }
public virtual string Model { get; }
public virtual string Color { get; }
public virtual double EngineSize { get; }
public virtual int NumberOfDoors { get; }
public virtual string VIN { get; }
public abstract string LicensePlate { get; }
}
И сериализовать к примеру только 3 свойства Year / Model / Color
Накинуть игнорирование именно в этом классе на некоторые свойства не могу - так как сторонняя библиотека.
Ответы (2 шт):
Можно через анонимный тип. Например, есть класс
public class Data
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
}
Например, надо взять только первые 2 свойства.
List<Data> list = ...;
string json = JsonSerializer.Serialize(list.Select(item => new
{
Prop1 = item.Prop1,
Prop2 = item.Prop2
}));
Также при таком исполнении можно переименовать свойства при присваивании.
Либо создать свой тип данных и переносить значения в него. Можно даже создать статический метод для конвертации данных.
public class MyData
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public static MyData FromData(Data source)
{
return new MyData
{
Prop1 = source.Prop1,
Prop2 = source.Prop2
};
}
}
string json = JsonSerializer.Serialize(list.Select(item => MyData.FromData(item)));
Для сериализации/десериализации вы можете использовать библиотеку System.ComponentModel.DataAnnotations, а именно аттрибуты JsonPropery для указания имени данного свойства в Json объекте, либо аттрибут JsonIgnore для игнорирования этого свойства во время сериализации