我在从API中删除下载的JSON字符串时遇到问题。我想将它反序列化为抽象类,因此类型将由运行时决定。
我的代码示例:
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
JsonClasses myObj = (JsonClasses) JsonConvert.DeserializeObject(this.Response, settings);
为了解释,在this.Response我有JSON字符串。我使用这种方式(TypeNameHandling)处理基于StackOverflow中另一个主题的反序列化,但它对我没有用 - 可能是因为他们最初将对象序列化为字符串,然后反序列化。我有一些来自抽象类JsonClasses的派生类。他们有不同的JSON结构"。有没有可能解决这个问题而不是那么困难?
感谢您的帮助!
答案 0 :(得分:2)
您无法创建抽象类的对象:
MSDN:抽象类与接口密切相关。它们是无法实例化的类,并且经常要么部分实现,要么根本没有实现。抽象类和接口之间的一个关键区别是类可以实现无限数量的接口,但可以仅从一个抽象(或任何其他类)的类继承。从抽象类派生的类仍然可以实现接口。抽象类在创建组件时很有用,因为它们允许您在某些方法中指定不变的功能级别,但是在需要该类的特定实现之前,请保留其他方法的实现。它们的版本也很好,因为如果派生类需要额外的功能,它可以添加到基类而不会破坏代码。
从您的抽象类(没有正文)继承一些类,并反序列化它。
例如:
public class YourClassName : JsonClasses
{
}
例如,我已经创建了一个示例通用方法,可以提供帮助:
public T DeserializeFromJsonClasses<T>() where T : JsonClasses
{
T myObj = default(T);
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All};
myObj = JsonConvert.DeserializeObject<T>(this.Response, settings);
return myObj;
}