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

のようなものは、xml シリアライザー (特に)Exceptionにはあまり適していません。XmlSerializerコンストラクターの問題 (回避できるシリアライザーと回避できないシリアライザーがあります) に加えて、予期しないサブクラスとコレクション内の任意のデータで問題が発生する可能性もあります。

xml としてシリアル化する場合は、必要な主要な情報 (.Messageおよびその他の情報) だけを取得する必要があります。また、クライアント/サーバー アプリケーションでは、クライアントは障害の詳細の多くを実際に知る必要がないことにも注意してください。それはサーバーに残る必要があります。予期されたエラー (無効なパラメーター、ログインの問題、クォータ制限など) であるか、予期しないエラーです。後者の場合:予期しないエラーが発生したと言ってください。詳細は開発者のみに役立つものであり、開発者はサーバーのエラー ログにアクセスできる必要があります。

于 2011-11-04T12:47:47.247 に答える