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);
}
}
但它会抛出无效的强制转换异常
事实上,反序列化程序只需要创建新的 A(( 而不是新的 JObject(( 并在那之后做完全相同的事情,这对我来说就足够了。
如何反序列化为更具体的 JObject 类型?
您将无法直接反序列化为 JObject 派生的A
类,因为 Json.Net 的内部专门处理 JTokens。 但是,您可以通过对代码进行两个小的更改来轻松解决此问题。
-
将构造函数添加到接受
JObject
并将其传递给基类构造函数的A
类。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)); } }
小提琴:https://dotnetfiddle.net/S8d3S6