在C#中序列化和反序列化Oracle.DataAccess.OracleException

时间:2011-11-04 12:36:52

标签: c# exception serialization deserialization oracleexception

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

1 个答案:

答案 0 :(得分:0)

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

如果你要序列化为xml,你应该只是捕获你需要的关键信息 - 可能是.Message和其他一些东西。另请注意,在客户端/服务器应用程序中,客户端实际上并不需要了解故障的大部分内容 - 应保留在服务器上。它是已执行错误(无效参数,登录问题,配额限制等),或者是意外错误。在后一种情况下:只是说发生意外错误。详细信息仅对开发人员有用,开发人员应该已经可以访问服务器的错误日志。