2011-01-31 11 views
4

コンパイルされたロギングライブラリを使用するコードベースを継承しました。ロギングライブラリを更新できません。このライブラリには、例外の詳細を記録するメソッドがあります。このメソッドは、単一のExceptionをパラメータとして取ります。私は現在、このシステムにつながるモバイルアプリケーションを構築しています。C#で例外を構築する

このモバイルアプリケーションでは、キャッチされていない例外を処理するコードブロックがあります。私はそれらをサーバーに記録する必要があります。しかし、今では、ネットワーク全体に細部だけを文字列形式で渡すことができます。このため、エラーメッセージ、スタックトレース、およびその他の文字列を受け入れるサービスがあります。私はこれらの文字列を持って例外に変換する必要があるので、それらを私の既存のライブラリに渡すことができます。

メッセージとstackTraceを文字列として受け取り、それらを例外にバンドルするにはどうすればよいですか?ここでの課題は、MessageとStackTraceは読み取り専用です。

ありがとうございました!

+2

シリアライズを検討しましたか? –

+0

それはあなたに何を与えるだろうか? – Aliostad

答えて

7

StackTraceは、仮想です。これにより、MessageStackTraceの値を完全に制御できます。

+0

私と同じ方法です。 – chriszero

+0

オーバーライドは何を助けたのですか?ありがとう! – user564042

1

例外はシリアル化可能である必要があります。そのため、データをシリアル化することができます。その後、後で直列化解除することができ、同じ例外があるはずです。

私はSoapFormatterがネットワーク経由で送ることを許可しなければならない、あるいは少なくともあなたに文字列表現を与えるべきだと思います。あなたのロギングコードにMyException

public class MyException : Exception { 
    private readonly string stackTrace; 
    public override string StackTrace { get { return this.stackTrace; } } 
    public MyException(string message, string stackTrace) : base(message) { 
     this.stackTrace = stackTrace; 
    } 
} 

、次に渡すインスタンス:あなたがあなた自身のExceptionので、などを定義することができるように

+0

私はこれを完全に理解していないかもしれません。私のモバイルアプリケーションはJava(Androidアプリ)です。私はJava例外を持っています。しかし、私のバックエンドはC#です。だから、私は例外を手動で構築したかったのです。 – user564042

+0

申し訳ありませんが、私は例外がJavaで最初にスローされていることを把握していませんでした。私のアプローチは、すべての詳細ではなく、元の例外を送信することを提案していました。これは、純粋にC#の場合にはうまくいきました。 – Ian

関連する問題