【发布时间】:2017-09-19 09:38:19
【问题描述】:
我在反序列化从 API 下载的 JSON 字符串时遇到问题。我想将其反序列化为抽象类,因此类型将由运行时决定。
我的代码示例:
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
JsonClasses myObj = (JsonClasses) JsonConvert.DeserializeObject(this.Response, settings);
为了解释,在 this.Response 中我有 JSON 字符串。我使用这种方式(TypeNameHandling)处理基于 StackOverflow 中另一个主题的反序列化,但它对我不起作用 - 也许是因为他们首先将对象序列化为字符串,然后再进行反序列化。我有一些来自抽象类 JsonClasses 的派生类。它们具有不同的“JSON 结构”。有没有可能以一些不那么困难的方式解决这个问题?
感谢您的帮助!
【问题讨论】:
-
为什么不
JsonConvert.DeserializeObject<JsonClasses>(this.Response, settings)? -
你想如何创建一个抽象类的对象?
-
很抱歉我写的不太正确。我需要创建一些继承类的实例,但返回对象是 JsonClasses 类型(这些继承类的父类)。但即使我使用 var test = JsonConvert.DeserializeObject
(this.Response, settings);它没有工作 -
JsonClasses是抽象的还是派生的?您需要在泛型参数JsonConvert.DeserializeObject<NonAbstractType>(json)中指定派生的非抽象类型。
标签: c# json serialization json.net deserialization