0

デシリアライズに問題があります。線を描画できる描画アプリケーションを作成していると想像してください。線の描画メソッドを担当するクラスがあるので、それをclsLineと呼びましょう。

現在、各線は、その開始点と終了点で他の線と N 個の接続を持つことができます。これまでのところ、すべて問題ありません。ここで、図面を xml ファイルに保存する必要があるため、シリアル化を行います。問題は、xml ファイルを開いて図面を元のオブジェクトに逆シリアル化すると、例外エラーが発生することです。

実際には、各線のリストを使用して、接続された各線または線分をその端に追加しています。

更新しました:

public class clsLine : ShapeBase
{
    //has all the properties and methods that should be applied to a line
    //e.g. length, angle, and etc.
    Connections endConnections = new Connections();
    Connections startConnections = new Connections();

}


public class Connection
{
    clsLine segment;
    int handle;

    public clsLine Segment
    {
        get { return segment; }
        set { segment = value; }
    }

    public int Handle
    {
        get { return handle; }
        set { handle = value; }
    }
}



public class Connections : List<Connection>
{
   public bool Contains(ShapeBase instance)
   {
        foreach (Connection con in this)
        {
            if (instance.Equals(con.Segment))
               return true;
        }
        return false;
   }
}

ここで、逆シリアル化中に次のような例外が発生します。

「タイプ 'OurProjectNameSpace.Connections' のコレクションに値を追加すると、例外がスローされました。」

私の同僚は、これは「接続」から「接続」へのキャストが原因であると説明していますが、これは理にかなっています。Connections は Connection タイプの配列またはリストであることに注意してください。

ここで頭を下げてもいいですか?

ありがとう。

4

1 に答える 1

1

これらの型に対して、独自のシリアル化および逆シリアル化ルーチンを作成することをお勧めします。特に、コレクション型とその派生型を使用する場合、(逆) シリアル化プロセスを制御したい場合があります。

カスタム シリアル化の方法については、http: //msdn.microsoft.com/en-us/library/ty01x675 (v=vs.80).aspx を参照してください。

XML シリアライゼーションを使用する場合、次の実装も必要になる場合がありIXmlSerializableます

于 2012-10-31T07:34:04.847 に答える