public class A : JObject
{}
我有下面的反序列化代码
using (StreamReader responseStreamReader = new StreamReader(stream))
{
using (JsonReader reader = new JsonTextReader(responseStreamReader))
{
JsonSerializer serializer = new JsonSerializer();
return serializer.Deserialize<A>(reader);
}
}
但它会抛出Invalid Cast Exception
事实上,反序列化器只需要创建新的A()而不是新的JObject()并在此之后完全相同,这对我来说已经足够了。
如何反序列化为更具体的JObject类型?
答案 0 :(得分:0)
您无法直接反序列化到您的JObject派生的A
类,因为Json.Net的内部特别处理了JTokens。但是,您可以通过对代码进行两处小更改来轻松解决问题。
向A
类添加一个构造函数,该类接受JObject
并将其传递给基类构造函数。
public class A : JObject
{
public A(JObject jo) : base(jo)
{
}
public A() : base()
{
}
}
在反序列化方法中,反序列化为JObject,然后从中构建A
类。
using (StreamReader responseStreamReader = new StreamReader(stream))
{
using (JsonReader reader = new JsonTextReader(responseStreamReader))
{
JsonSerializer serializer = new JsonSerializer();
return new A(serializer.Deserialize<JObject>(reader));
}
}