我继承了大量使用BinaryFormatter进行序列化的代码,现在需要调试这些代码。所有序列化代码当前都需要一个IFormatter。
我有一个想法是用XmlSerializer替换BinaryFormatter,以便更容易地检查序列化的输出,但它们不兼容(没有公用库或接口)。
有没有一种标准的方法,比如让参数成为我的代码可以使用的某种泛型序列化程序?理想情况下,我希望在顶层创建任何我想要的具体序列化程序,然后它向下传递它,而不需要知道具体的类型。
下面是我当前拥有的示例:
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);
}发布于 2012-12-21 02:15:58
如前所述,并不是所有二进制可序列化的对象都是可序列化的(例如,任何带有TimeSpan的对象)。
为了使工作更容易,在应用程序使用的方法名称和参数方面,让接口与二进制格式化程序非常相似,这样您就可以相对轻松地替换出现的具体二进制格式化程序。
发布于 2012-12-21 03:36:23
你查过SoapFormatter了吗?虽然不像XmlSerializer那样具有可读性,但是仍然可以理解大多数值。它继承自IFormatter,就像BinaryFormatter一样。因此,您无需修改代码即可更改为。
此外,XmlSerializer只能处理具有无参数构造函数的对象的公共属性,而IFormatters使用反射,可以使用参数化构造函数处理私有字段和对象。此外,属性Serializable只能与格式化程序一起使用,而不能与XmlSerializer一起使用。这在本质上是不同的,您可能需要更改很多代码。
https://stackoverflow.com/questions/13977538
复制相似问题