2

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;
        }  
4

1 回答 1

0

诸如此类的东西Exception不太适合 xml 序列化程序(XmlSerializer尤其是)。除了构造函数问题(有些序列化程序可以解决,有些不能)之外,您还可能会遇到意外子类和集合中的任意数据的问题。

如果您将序列化为 xml,您可能应该只捕获您需要的关键信息——也许还有.Message其他一些东西。另请注意,在客户端/服务器应用程序中,客户端实际上并不需要知道很多失败的细节——这些细节应该保留在服务器上。要么是执行错误(无效参数、登录问题、配额限制等),要么是意外错误。在后一种情况下:只说发生了意外错误。详细信息只对开发人员有用,并且开发人员应该已经可以访问服务器的错误日志。

于 2011-11-04T12:47:47.247 回答