System.Text.Json просто потому, что в 7-й версии сделали прорыв с полиморфизмом, а в 8-й с интеграцией Source Generators9-я же версия не копает куда-то вглубь, а растёт вширь, охватывая всего понемножку.
Во-первых, наконец-то завезли нормальную сериализацию енамов:
JsonSerializer.Serialize(MyEnum.Value1 | MyEnum.Value2); // "Value1, Custom enum value"
[Flags, JsonConverter(typeof(JsonStringEnumConverter))]
enum MyEnum
{
Value1 = 1,
[JsonStringEnumMemberName("Custom enum value")]
Value2 = 2,
}
Во-вторых, добавили глубокую проверку на равенство:
JsonElement left = JsonDocument.Parse("10e-3").RootElement;
JsonElement right = JsonDocument.Parse("0.001").RootElement;
JsonElement.DeepEquals(left, right); // TrueВ-третьих, убрали строгость порядка полей метанаданных:
JsonSerializerOptions options = new() { AllowOutOfOrderMetadataProperties = true };
JsonSerializer.Deserialize<Base>("""{"Name":"Name","$type":"derived"}""", options); // SuccessВ общем, то тут то там, по мелочи чего-то добавили
Полная сводка всех свежих новостей тут 👉 https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-9