OracleException没有公共构造函数,也没有任何获得新实例的方法。我尝试了XmlSerializerHelper类,但它需要一个公共的无参数构造函数。
我使用BinaryFormatter序列化OracleException并将其写入文件。
如何在文件中序列化OracleException,并使用XmlSerializer进行反序列化-出于测试原因-?
参考:http://geekswithblogs.net/WillSmith/archive/2008/07/25/testing-oracleexception.aspx
PD:是SoapFormatter更好还是BinaryFormatter更好?
代码SerializationHelper.Serialize(@"C:TempExcepcionOracle.bin", ex);
var exOra = SerializationHelper.Deserialize(@"C:TempExcepcionOracle.bin");
public static void Serialize(string fileName, Object obj)
{
var binaryFormatter = new BinaryFormatter();
var fileStream = new FileStream(fileName, FileMode.Create);
try
{
binaryFormatter.Serialize(fileStream, obj);
}
catch (SerializationException ex)
{
throw new ApplicationException("The object graph could not be serialized", ex);
}
finally
{
fileStream.Close();
}
}
public static object Deserialize(string fileName)
{
var binaryFormatter = new BinaryFormatter();
var fileStream = new FileStream(fileName, FileMode.Open);
try
{
fileStream.Seek(0, SeekOrigin.Begin);
return binaryFormatter.Deserialize(fileStream);
}
catch (SerializationException ex)
{
throw new ApplicationException("Serialization Exception: " + ex.Message);
}
finally
{
fileStream.Close();
}
return null;
}
像Exception
这样的东西根本不太适合xml序列化器(特别是XmlSerializer
)。除了构造函数问题(有些序列化器可以解决这个问题,有些则不能)之外,您还可能遇到意想不到的子类和集合中的任意数据的问题。
如果您序列化为xml,您可能应该只捕获您需要的关键信息—可能是.Message
和其他一些东西。还要注意的是,在客户机/服务器应用程序中,客户机实际上并不需要知道故障的太多细节——这些细节应该留在服务器上。要么是预期的错误(无效参数、登录问题、配额限制等),要么是意外的错误。在后一种情况下:表示发生了意外错误。这些细节只对开发人员有用,并且开发人员应该已经可以访问服务器的错误日志。