Json.net 反序列化为 JObject 派生类型


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。 但是,您可以通过对代码进行两个小的更改来轻松解决此问题。

  1. 将构造函数添加到接受JObject并将其传递给基类构造函数的A类。

    public class A : JObject
    {
        public A(JObject jo) : base(jo)
        {
        }
        public A() : base()
        {
        }
    }
    
  2. 在反序列化
  3. 方法中,反序列化为 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

最新更新