0

次の場所に投稿するユーザーと同様の問題が発生しました。

WinForms C#でのカスタムオブジェクトタイプのクロスプロセスドラッグアンドドロップ

幸い、SortedListオブジェクトを除いて、カスタムオブジェクトのほぼすべての部分をシリアル化する方法を理解しました。

このオブジェクトが必要なのは、アプリケーションにとって非常に重要な情報が含まれており、Xmlのネストがかなり乱雑だからです。

ISerializableメンバーGetObjectData()にSortedListを追加する行をコメントアウトすると、オブジェクトはそれを新しいアプリに渡します。そのままにしておくと、そうではなく、シリアル化する方法がわかりません。

私はここStackOverflowとWebの両方でいくつか調べましたが、何の役にも立ちませんでした。

次のコードを使用して、オブジェクトがシリアル化可能かどうかを確認し、別のアプリケーションにドラッグアンドドロップできるようにします。

    /// <summary>
    /// Determine if object can be fully serializable to binary format.
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="errorMsg">If return value false, contains reason for failure.</param>
    /// <returns></returns>
    public static bool IsSerializable(object obj, out string errorMsg)
    {
        errorMsg = "";

        using (MemoryStream mem = new MemoryStream())
        {
            BinaryFormatter bin = new BinaryFormatter();
            try
            {
                bin.Serialize(mem, obj);
                return true;
            }
            catch (Exception ex)
            {
                errorMsg = string.Format("Object cannot be serialized: {0}", ex.ToString());
                return false;
            }
        }
    }

誰かが私を助けることができる提案がありますか?可能であれば、ドラッグアンドドロップ中にXmlNodeのリストをそのまま保持したいのですが、追加のコーディングを行ってシリアル化可能な部分に分割し、反対側で再構築することに反対しません。重要なことは、最終結果にSortedListが含まれている必要があるということです。

必要に応じて、ドラッグアンドドロップ用にシリアル化するカスタムオブジェクトのコンテンツを提供できます。

ありがとう、

カイルK。

4

1 に答える 1

0

私はついにオブジェクトを正しくシリアル化する方法を見つけました。XmlNodeのSortedListを使用していましたが、XmlNodeオブジェクトがシリアル化できないことがわかりました。文字列のSortedListを含むように実装を切り替えたところ、すべてが正常に機能するようになりました。

ありがとう、

カイル

于 2011-10-12T14:05:29.633 に答える