我是Json的新手,所以有点绿。
我有一个基于Rest的服务,它返回一个json字符串;
{"treeNode":[{"id":"U-2905","pid":"R","userId":"2905"},
{"id":"U-2905","pid":"R","userId":"2905"}]}
我一直在玩Json.net并尝试将字符串反序列化为Objects等。 我写了一个扩展方法来帮助。
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;
}
我期待一组treeNode []对象。但似乎我只能在另一个对象的treeNode []属性中正确反序列化。
public class treeNode
{
public string id { get; set; }
public string pid { get; set; }
public string userId { get; set; }
}
我有办法从反序列化中获得直接数组吗?
干杯
答案 0 :(得分:3)
您可以使用匿名类:
T DeserializeJson<T>(string s, T templateObj) {
return JsonConvert.Deserialize<T>(s);
}
然后在你的代码中:
return DeserializeJson(jsonString, new { treeNode = new MyObject[0] }).treeNode;
答案 1 :(得分:0)
不幸的是,JSON在序列化时不支持类型信息,它的纯对象字典而不是完整的类数据。您必须编写某种扩展来扩展JSON序列化程序和反序列化程序的行为,以支持正确的类型marshelling。
如果期望的类型是精确的而不是派生类型,则赋予根类型将正确映射对象图。
例如,如果我将属性作为基类数组,并且我的实际值可以包含任何类型的派生子类。 JSON不完全支持它,但Web服务(SOAP)允许您使用动态类型序列化对象。