@midfel

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

Имею какой-то класс типа:
class RegisterClient
{
public string ID { get; set; } = string.Empty;
public string tel { get; set; } = string.Empty;
public string mail { get; set; } = string.Empty;
public List emcList { get; set; } = null;
}

Необходимо отсортировать рекурсивно по названию полей его свойства, проще говоря стоит задача сформировать с этого класса хэш для передачи серверу рекурсивно.

Подскажите возможные пути решения этой задачи
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Можно указывать порядок свойств для сериализации при помощи атрибута 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
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы