1

我正在将核心 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 我必须使用此代码将其序列化为EventJSON,然后将其再次反序列化为最终类型:

    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);
4

0 回答 0