我正在将核心 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);