Я портирую ядро 2.2 SDK на 3.0. Newtonsoft был заменен родным двигателем Json. Мой SDK берет JObject и конвертирует его в конкретный тип, используя ToObject<T>()
Что эквивалентно этому с JsonElement?
Я хочу десериализовать класс Message
, чей Event
свойство может быть определено только во время выполнения:
private class Message
{
public string Type { get; set; }
public JsonElement Event { get; set; }
public string[] GenericArguments { get; set; }
public int? Id { get; set; }
}
В System.Text.Json мне нужно использовать этот код для сериализации Event
в JSON, а затем снова десериализовать его до окончательного типа:
private dynamic ParseTypeData(Message message)
{
Type type = typeFinder.GetEventType(message.Type);
if (message.GenericArguments.Length > 0)
{
var genericArguments = message.GenericArguments
.Select(typeFinder.GetType)
.ToArray();
type = type.MakeGenericType(genericArguments);
}
var json = message.Event.GetRawText();
return JsonSerializer.Deserialize(json, type, Options);
}
В JSON.NET класс был:
private class Message
{
public string Type { get; set; }
public JObject Event { get; set; }
public string[] GenericArguments { get; set; }
public int? Id { get; set; }
}
И десериализация Event
необходима только:
return message.Event.ToObject(type);