【发布时间】:2020-04-17 17:49:59
【问题描述】:
我有一个对象数组,我想将其写入 json 文件并稍后恢复。必须保留对象的顺序。
interface Task {}
class TaskA : Task {}
class TaskB : Task {}
var array = new Task[] {new TaskB(), new TaskA()};
如果我使用简单的JsonConvert.SerializeObject(array);,我会得到一个Objects 的列表,并且无法恢复对象的类型(我无法通过对象的字段恢复对象的类型)。
我找到了一种用它写对象类型的方法:
var serializer = new Newtonsoft.Json.JsonSerializer();
serializer.TypeNameHandling = TypeNameHandling.Objects;
我不想手动读取每个字段,我相信必须有一种方法告诉 Newtonsoft:像往常一样读取它,只需考虑对象的类型即可。它是微不足道的,我只是错过了一些东西吗?
【问题讨论】:
-
你可以使用
TypeNameHandling.Auto: newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm。 -
... 我发布的那个链接?它也有一个反序列化的例子。
-
是的,对不起,我以某种方式错过了链接......这听起来完全像我正在寻找的解决方案(为什么不将其作为答案发布?)但它仍然读取内容我的数组作为“对象”。就像,所有
ChildrenTokens都具有Object类型。我不明白为什么。我试过TypeNameHandling.Auto,我试过TypeNameHandling.Object- 该类型是用JSON编写的,但在阅读过程中它完全被忽略了...... -
哦,我已经把阅读从
JsonConvert.DeserializeObject()变成了JsonConvert.DeserializeObject<Task[]>(),它成功了!我希望您将您的建议作为答案发布,以便我接受它:)