using System.Text.Json.Serialization;
using System.Collections.Generic;
namespace JsonSerializers;
private static readonly JsonSerializerOptions FilterOptions = new()
AllowTrailingCommas = true,
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow,
UnknownTypeHandling = JsonUnknownTypeHandling.JsonElement,
static void Main(string[] args)
var oldObj = new List<GroupingFilter>
new ImportBatchFilter { ImportBatches = [1, 2, 3, 4] },
new RecipientFilter { Recipients = [99, 199, 299] },
var json = Serialize(oldObj);
var newObj = Deserialize(json);
private static string Serialize(IList<GroupingFilter> input)
using var stream = new MemoryStream();
JsonSerializer.Serialize(stream, input, FilterOptions);
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
private static ICollection<GroupingFilter> Deserialize(string json)
return JsonSerializer.Deserialize<IList<GroupingFilter>>(json, FilterOptions) ?? [];
public abstract class GroupingFilter
public virtual string FilterType => GetType().Name;
public sealed class ImportBatchFilter : GroupingFilter
public IList<long>? ImportBatches { get; set; }
public sealed class RecipientFilter : GroupingFilter
public IList<int>? Recipients { get; set; }