Можно указывать порядок свойств для сериализации при помощи атрибута 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
}