c#:使第三方对象可序列化

时间:2012-02-03 13:17:30

标签: c# serialization

在我自己的对象上,我可以添加metatag [Serializable]以使其可序列化。现在我使用了第三方库,我需要将其序列化。我检查了代码,这应该不是问题。有没有办法解决这个问题而不改变第三方代码?

4 个答案:

答案 0 :(得分:6)

我的建议是:序列化数据,而非实施。存在第三方对象的事实与数据无关;这是一个实现细节。因此,我总是提供相同的建议:如果序列化永远变得复杂,首先要做的是引入一个单独的DTO模型,它代表数据,而不是实现,只是将当前状态映射到该DTO。这使您可以在不影响存储的情况下处理实现更改,并允许序列化非序列化对象。

某些序列化程序提供了解决方法 - 例如使用protobuf-net,您可以:在运行时提供任何类型的序列化信息,b:提供“代理”以在棘手时自动使用,但是 - 使用DTO模型更简单,更容易维护。

您使用[Serializable]建议BinaryFormatter;在我看来,对于任何类型的存储来说,几乎从不是一个很好的选择,因为BinaryFormatter依赖于实现细节。它适用于在两个同步应用程序域之间传递数据,但

答案 1 :(得分:0)

如果类型是公开的,您应该可以使用XmlSerializer做您想做的事。

more information on this here

  

将对象序列化和反序列化到XML文档中或从XML文档中反序列化。该   XmlSerializer使您可以控制对象如何编码为XML。

答案 2 :(得分:0)

正确地使用您的子类并使其可序列化。

[Serializable] public class Foo: Bar {}

答案 3 :(得分:0)

编写适配器或准备做更极端的事情,例如反汇编程序集,注入serializable属性并重新组装。