【问题标题】:How to save/restore serializable object to/from file? (part 2) dynamic object如何在文件中保存/恢复可序列化对象? (第二部分)动态对象
【发布时间】:2011-09-01 10:05:07
【问题描述】:

我之前问过How to save/restore serializable object to/from file? 的问题,当我知道要保存什么类型的对象时,该解决方案效果很好。

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

无论如何我都想做类似的事情:

[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>

}

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

【问题讨论】:

  • 您不应编辑其他人的答案以包含有关您的问题的更多信息;您应该对答案发表评论,或再次编辑您的问题以包含其他信息。 (另外,请将较长的部分分成几段。:)

标签: c# serialization stream


【解决方案1】:

你不能轻易序列化一个没有用 Serializable 属性标记的对象,所以简短的回答是否定的。

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

【讨论】:

  • 这里某处缺少“with BinaryFormatter”。有无数可用的序列化程序,很少有人关心[Serializable]
  • 大多数序列化程序并不是我所说的复杂(从用户的角度来看)
  • 我更多的是在谈论内置。除非绝对必要,否则我个人非常不喜欢使用外部库 - 在这种情况下,它看起来不是绝对必要的,它只是为了方便和以速度为代价。
  • @minitech - 我没有这种不喜欢 - 我已经为这样的事情编写了服务器库(序列化,物化(想想:DataContext.ExecuteQuery), -执行 MS 产品。您不必在这里牺牲性能。
  • 当然——dapper-dot-net 是我们(stackoverflow/stackexchange)在从数据库读取(而不是编辑)数据时使用的——比 L2S(或其他任何东西)更快。 protobuf-net 是 AFAIK 最快的 .NET 序列化程序
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多