序列化和反序列化类型仅在运行时已知的对象

问题描述 投票:0回答:1

我不熟悉在 C# 中使用 json 序列化。 如果我执行以下操作,这段代码会起作用吗: A)想要序列化继承Loadable的对象 B) 想要加载继承类型的序列化实例? [对于这一点,我需要一些帮助来将序列化实例加载到对象的当前实例中,我当前的系统需要向下转型]

internal abstract class Loadable
    {
        public void Save(string fileName)
        {
            File.WriteAllText(fileName + ".json", JsonSerializer.Serialize(this));
        }

        public IBrain Load(string fileName, Type brainType)
        {
            return (IBrain)JsonSerializer.Deserialize(File.ReadAllText(fileName + ".json"), brainType);
        }
    }
c# json inheritance
1个回答
0
投票

要序列化/反序列化派生类型,可以使用“多态序列化”,它添加了可用于反序列化为正确类型的类型信息。请注意,您通常仍然需要在编译时了解所有派生类型。 使用运行时已知的类型

only

序列化对象也应该可以正常工作。 serialize 方法 只需要一个 object 和一个

Type
。并且
Type
可以从对象本身创建。
反序列化完全未知的类型将更具挑战性。您仍然可以传递 

Type

对象,但这需要您以某种方式知道它应该是什么类型。但是如果没有任何静态类型,您就无法真正将该对象用于任何用途。因此,您可能需要将 json 视为属性树。请参阅

Json 文档对象模型

© www.soinside.com 2019 - 2024. All rights reserved.