Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JsonElement相当于JObject.ToObject_C#_Json_.net Core 3.0_System.text.json - Fatal编程技术网

C# JsonElement相当于JObject.ToObject

C# JsonElement相当于JObject.ToObject,c#,json,.net-core-3.0,system.text.json,C#,Json,.net Core 3.0,System.text.json,我正在将核心2.2SDK移植到3.0。Newtonsoft已被本机Json引擎取代。My SDK使用ToObject() 这与JsonElement的等效性是什么 我想反序列化一个消息类,该类的事件属性只能在运行时确定: private class Message { public string Type { get; set; } public JsonElement Event { get; set; } public string[] GenericArgument

我正在将核心2.2SDK移植到3.0。Newtonsoft已被本机Json引擎取代。My SDK使用
ToObject()

这与JsonElement的等效性是什么

我想反序列化一个
消息
类,该类的
事件
属性只能在运行时确定:

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中,我必须使用此代码将
事件
序列化为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; }
    }
仅需要反序列化
事件

return message.Event.ToObject(type);

您正在询问如何将JSON元素反序列化为对象。为什么要使用JsonElement?System.Text.Json是针对围绕ASP.NET核心序列化的非常特定的场景进行定制的。DOM解析到JsonDocument,使用JsonSerializer进行完全反序列化,或者使用Utf8JsonReader进行极低级别的不完全SAX。甚至连一个JSon流都没有,直到运行时我才知道它的类型,dto看起来像,我想这在newtonsoft中要优雅得多。你应该在问题本身中发布代码,这样人们才能理解上下文——你使用的是信号器,有一个消息类,它的负载可以是任何类型的对象。您所需要的也是Json.NET中的一个实用方法-字符串首先解析为JObject,然后
ToObject
使用反射构造并填充自定义对象。Json还不是那种解析器——它没有这样的实用方法,它专注于管道中的快速解析。它的工作是以最小的分配相关或重复:。快速向您提供一条
消息
。您正在询问如何将JSON元素反序列化为对象。为什么要使用JsonElement?System.Text.Json是针对围绕ASP.NET核心序列化的非常特定的场景进行定制的。DOM解析到JsonDocument,使用JsonSerializer进行完全反序列化,或者使用Utf8JsonReader进行极低级别的不完全SAX。甚至连一个JSon流都没有,直到运行时我才知道它的类型,dto看起来像,我想这在newtonsoft中要优雅得多。你应该在问题本身中发布代码,这样人们才能理解上下文——你使用的是信号器,有一个消息类,它的负载可以是任何类型的对象。您所需要的也是Json.NET中的一个实用方法-字符串首先解析为JObject,然后
ToObject
使用反射构造并填充自定义对象。Json还不是那种解析器——它没有这样的实用方法,它专注于管道中的快速解析。它的工作是以最小的分配相关或重复:快速给您一条
消息。