Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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# 使用json.net c反序列化json#_C#_Json.net - Fatal编程技术网

C# 使用json.net c反序列化json#

C# 使用json.net c反序列化json#,c#,json.net,C#,Json.net,我刚接触Json,所以有点绿色 我有一个基于Rest的服务,它返回一个json字符串 {"treeNode":[{"id":"U-2905","pid":"R","userId":"2905"}, {"id":"U-2905","pid":"R","userId":"2905"}]} 我一直在玩Json.net,并试图将字符串反序列化为对象等。 我写了一个扩展方法来提供帮助 public static T DeserializeFromJSON<T>(this Stream jso

我刚接触Json,所以有点绿色

我有一个基于Rest的服务,它返回一个json字符串

{"treeNode":[{"id":"U-2905","pid":"R","userId":"2905"},
{"id":"U-2905","pid":"R","userId":"2905"}]}
我一直在玩Json.net,并试图将字符串反序列化为对象等。 我写了一个扩展方法来提供帮助

public static T DeserializeFromJSON<T>(this Stream jsonStream, Type objectType)
        {
            T result;

            using (StreamReader reader = new StreamReader(jsonStream))
            {
                JsonSerializer serializer = new JsonSerializer();
                try
                {
                    result = (T)serializer.Deserialize(reader, objectType);
                }
                catch (Exception e)
                {   
                    throw;
                }

            }
            return result;
        }
有没有办法从反序列化中直接得到一个数组


Cheers

不幸的是,JSON在序列化时不支持类型信息,它是纯对象字典,而不是完整的类数据。您必须编写某种扩展来扩展JSON序列化程序和反序列化程序的行为,以支持正确的类型转换

如果预期的类型是精确的而不是派生类型,则给定根类型将正确映射对象图


例如,如果我将属性作为基类的数组,并且我的实际值可以包含任何类型的派生子类。JSON并不完全支持它,但web服务(SOAP)允许您使用动态类型序列化对象

您可以使用匿名类:

T DeserializeJson<T>(string s, T templateObj) {
    return JsonConvert.Deserialize<T>(s);
}

否,如果您在反序列化调用中指定了正确的根类型,Json.NET将知道这些类型。如果我的属性具有基类型,并且它的值是派生类型,该怎么办?Soap支持这种类型映射。JSON并不完全支持它。
T DeserializeJson<T>(string s, T templateObj) {
    return JsonConvert.Deserialize<T>(s);
}
return DeserializeJson(jsonString, new { treeNode = new MyObject[0] }).treeNode;