首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交替使用BinaryFormatter和XmlSerializer

交替使用BinaryFormatter和XmlSerializer
EN

Stack Overflow用户
提问于 2012-12-21 01:33:42
回答 2查看 1.8K关注 0票数 2

我继承了大量使用BinaryFormatter进行序列化的代码,现在需要调试这些代码。所有序列化代码当前都需要一个IFormatter。

我有一个想法是用XmlSerializer替换BinaryFormatter,以便更容易地检查序列化的输出,但它们不兼容(没有公用库或接口)。

有没有一种标准的方法,比如让参数成为我的代码可以使用的某种泛型序列化程序?理想情况下,我希望在顶层创建任何我想要的具体序列化程序,然后它向下传递它,而不需要知道具体的类型。

下面是我当前拥有的示例:

代码语言:javascript
复制
BinaryFormatter bformatter = new BinaryFormatter();     //create a binary formatter
PutPw(bformatter, stream, panel.DevicePassword);    //encode and stream the password

public static void PutPw(IFormatter bf, Stream stream, string pw)
{
    ...
    bf.Serialize(stream, pw);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-21 02:15:58

如前所述,并不是所有二进制可序列化的对象都是可序列化的(例如,任何带有TimeSpan的对象)。

为了使工作更容易,在应用程序使用的方法名称和参数方面,让接口与二进制格式化程序非常相似,这样您就可以相对轻松地替换出现的具体二进制格式化程序。

票数 3
EN

Stack Overflow用户

发布于 2012-12-21 03:36:23

你查过SoapFormatter了吗?虽然不像XmlSerializer那样具有可读性,但是仍然可以理解大多数值。它继承自IFormatter,就像BinaryFormatter一样。因此,您无需修改代码即可更改为。

此外,XmlSerializer只能处理具有无参数构造函数的对象的公共属性,而IFormatters使用反射,可以使用参数化构造函数处理私有字段和对象。此外,属性Serializable只能与格式化程序一起使用,而不能与XmlSerializer一起使用。这在本质上是不同的,您可能需要更改很多代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13977538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档