如何将可序列化对象保存到文件中/从文件中恢复?(2)动态对象

本文关键字:对象 恢复 文件 动态 序列化 存到文件 | 更新日期: 2023-09-27 17:57:40

我之前问过这样一个问题:如何将可序列化对象保存到文件中/从文件中恢复?当我知道要保存什么类型的对象时,该解决方案非常有效。

如果我能保存一个未知类型的对象,那就太好了。

无论如何,我想做一些类似的事情:

[Serializable]
MyCustomClass
{
   // properties. I don't know which properties this class has. I might pass a different class. 
}

public void saveObjectInComputer(object obj, string pathWhereToSaveObject)
{
     // code
}
 public object deserializeObject(string pathWhereObjectIsLocated)
 {
      // code to retrive object
      // ...
      return object;
 }
static void Main(string[] args)
{
     List<MyCustomClass> myList = new List<MyCustomClass>();
     myList.add(new MyCustomClass { "properties go here" } );
     saveObjectInComputer(myList, @"C:'Temp'object.txt");
     // code  
     // Later it will be nice if I could retrive the object 
     object a = deserializeObject(@"C:'Temp'object.txt");
     // then cast a to List<MyCustomClass>
}

后来,如果我构建一个汽车列表或人员列表,我可以使用相同的方法,而不是为每个构建一个新的方法。此外,稍后我知道我正在寻找的方法将返回一个对象,并且我可以将该对象强制转换为我当前使用的类型。

如何将可序列化对象保存到文件中/从文件中恢复?(2)动态对象

您无法轻易序列化未标记Serializable属性的对象,因此简短的答案是否定的。

如果你愿意进入中等难度的代码,你可以使用反射并设计一种自定义格式来保存状态,对索引属性等使用异常。不过,你也可以不这样做。