OracleException没有公共构造函数,也没有任何获取新实例的方法。我尝试了我的XmlSerializerHelper类,但它需要一个公共无参数构造函数。
我使用BinaryFormatter序列化OracleException并将其写入文件。
如何在文件中序列化OracleException,并使用XmlSerializer进行反序列化 - 出于测试原因 - ?
参考: http://geekswithblogs.net/WillSmith/archive/2008/07/25/testing-oracleexception.aspx
PD:更好的SoapFormatter还是BinaryFormatter?
代码
SerializationHelper.Serialize(@"C:\Temp\ExcepcionOracle.bin", ex);
var exOra = SerializationHelper.Deserialize(@"C:\Temp\ExcepcionOracle.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;
}
答案 0 :(得分:0)
Exception
这样的东西根本不适合xml序列化程序(尤其是XmlSerializer
)。除了构造函数问题(某些序列化程序可以解决这些问题,有些不能解决)之外,您还可能会遇到集合中意外子类和任意数据的问题。
如果你要序列化为xml,你应该只是捕获你需要的关键信息 - 可能是.Message
和其他一些东西。另请注意,在客户端/服务器应用程序中,客户端实际上并不需要了解故障的大部分内容 - 应保留在服务器上。它是已执行错误(无效参数,登录问题,配额限制等),或者是意外错误。在后一种情况下:只是说发生意外错误。详细信息仅对开发人员有用,开发人员应该已经可以访问服务器的错误日志。