• Сортировка полей объекта?

    Можно указывать порядок свойств для сериализации при помощи атрибута JsonPropertyOrder.

    Ещё можно попробовать программно через https://learn.microsoft.com/en-us/dotnet/standard/...
    (вот примитивный пример, который не учитывает атрибуты)
    using System;
    using System.Text.Json;
    using System.Text.Json.Serialization;
    using System.Text.Json.Serialization.Metadata;
    
    var options = new JsonSerializerOptions
    {
        TypeInfoResolver = new DefaultJsonTypeInfoResolver
        {
            Modifiers = { AlphabeticalOrderModifier }
        },
        WriteIndented = true
    };
    
    var obj = new MyClassA { X = 42, B = new MyClassB { X = 69 } };
    var result = JsonSerializer.Serialize(obj, options);
    Console.WriteLine(result);
    
    static void AlphabeticalOrderModifier(JsonTypeInfo jsonTypeInfo)
    {
        if (jsonTypeInfo.Kind != JsonTypeInfoKind.Object) return;
        var properties = jsonTypeInfo.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty).OrderBy(x => x.Name);
        jsonTypeInfo.Properties.Clear();
        foreach (var property in properties)
        {
            var propertyInfo = jsonTypeInfo.CreateJsonPropertyInfo(property.PropertyType, property.Name);
            propertyInfo.Get = property.GetValue;
            propertyInfo.Set = property.SetValue;
            jsonTypeInfo.Properties.Add(propertyInfo);
    
        }
    }
    
    class MyClassA
    {
        public int X { get; set; }
        public MyClassB B { get; set; }
    }
    
    class MyClassB
    {
        public int X { get; set; }
    }


    Выводит такое (как раз всё в алфавитном порядке, не смотря на то, в каком порядке всё написано в классе):
    {
      "B": {
        "X": 69
      },
      "X": 42
    }
    Ответ написан
    8 комментариев