C# 使用json.net c反序列化json#
我刚接触Json,所以有点绿色 我有一个基于Rest的服务,它返回一个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
{"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;