Добавление модификаторов в System.Text.json сериализация при использовании генерации источникаC#

Место общения программистов C#
Ответить
Anonymous
 Добавление модификаторов в System.Text.json сериализация при использовании генерации источника

Сообщение Anonymous »

Я в настоящее время использую следующий код для настройки system.text.json jsoneserializeroptions объект, который алфавизирует свойства при сериализации:

Код: Выделить всё

public static readonly JsonSerializerOptions serializerOptions = new()
{
TypeInfoResolver = new DefaultJsonTypeInfoResolver
{
Modifiers =
{
AlphabetizeProperties,
}
}
}

private static void AlphabetizeProperties(JsonTypeInfo info)
{
if (info.Kind != JsonTypeInfoKind.Object) return;

List sortedProperties = [];
sortedProperties.AddRange(info.Properties);
sortedProperties.Sort((p1, p2) => string.CompareOrdinal(p1.Name, p2.Name));

info.Properties.Clear();

for (int i = 0; i < sortedProperties.Count; i++)
{
sortedProperties[i].Order = i;
info.Properties.Add(sortedProperties[i]);
}
}
Я в процессе попытки преобразовать наш код для использования функции System.text.json генерации источников, чтобы мы могли включить обрезку и в конечном итоге перейти в NativeAot. Тем не менее, я не могу найти какого -либо способа вставить модификаторы в jsonserializercontext .
Вещи, которые я пробовал:

jsonsourcegenerationoptions не имеет никакого способа информировать модификаторы. Jsonserializercontext . В статическом конструкторе я могу инициализировать jsoneserializeroptions , вручную построить новый экземпляр моего jsonserializercontext и перезаписать свойство по умолчанию . Это похоже на подход, используемый здесь, для другой цели. Однако зависимость круговая; Мне нужен Jsonserializeroptions , чтобы инициализация jsonserializercontext , поэтому я могу вызвать withAdddedmodifiers , и мне нужно передать jsonserializercontext jsonserializeroptions.typeinforesolver инициализировать его. Jsontypeinfo экземпляр через jsonserializercontext.default.myobject и вызов alphabetizeproperties непосредственно на нем. Это бросает InvalidoperationException с помощью следующего сообщения: этот экземпляр JSonTyPeInfo помечен только для чтения или уже использовался в сериализации или десеризации. За исключением этого радикального шага, есть ли способ достичь того, что я ищу?

Подробнее здесь: https://stackoverflow.com/questions/797 ... generation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»