2010-03-16 38 views
0

什么是序列化自定义类的更好方法:在类上使用XMLSerializer或BinarryFormatter和[Serializable]属性?关于序列化的问题

回答

2

如果不知道如何使用生成的文件以及它的生命周期,就无法回答这个问题。

这个决定是基于这样一个事实:“升级”二进制格式比较困难。如果你的对象模型改变了,它将不会正确地反序列化。但是如果你已经实现了一个自定义的XML序列化/反序列化,那么你可以适当地处理这些“新”情况,并且生活会很好。

因此,请更多地了解您将如何使用它,您与谁共享信息以及模型可能发生的变化。

FWIW,我有时在给定的项目中使用这两种类型的序列化。

+0

所以我用一个XmlSerializer的,并试图序列包含字典的类上暴露给任何客户端无论平台/环境,但它提出一个错误:“无法序列化一个成员,因为它实现了IDictionary”。 你可以请情况帮忙吗? – Mike 2010-03-16 11:00:33

+0

@Mike:你可以帮助自己。该错误消息表示它无法序列化该接口。所以你需要自己实现它(通过覆盖相应的函数)。 – 2010-03-16 11:39:02

+0

非常感谢您的建议 – Mike 2010-03-16 12:20:39

1

这真的取决于你如何使用序列化的类。如果您想将其传递给其他程序或想要轻松调试它,请使用XML(但请注意,XMLSerializer可能会生成不符合规范的XML输出,如多个根元素)。

在其他所有情况下,您可以使用二进制格式化程序。但是请注意,如果稍后更改类,则XML更适合 - 您可以使用XMLIgnore等来保持XML格式不变。

0

有时也会根据序列化输出的用途为您做出决定 - 虽然您可以公开一个WebService以获取二进制数组,这是一个二进制序列化项,但您无法使用Web服务很容易从除.Net之外的任何东西(并且最终客户端可能需要对该类型的引用)。

使用XML意味着服务可以在最终客户