none
タイプの取得に失敗する RRS feed

  • 質問

  • お世話になっております。タイトルのことで質問があります。

    2次元配列があるクラスのタイプを取得しようとするとInvalidOperationExceptionが発生してしまいます。

     

    具体的なサンプル:

     

    public class TestClass

    {
         public int[,] foo = new int[1,1];
    }

     

    //実行部

     

    TestClass tc = new TestClass();
     int[,] a = new int[1,1];
     a[0,0] = 1;
     tc.foo = a;

     System.Xml.Serialization.XmlSerializer se =
     new System.Xml.Serialization.XmlSerializer(typeof(TestClass));

     System.IO.FileStream fs = new System.IO.FileStream("testclass.xml",System.IO.FileMode.Create);
     se.Serialize(fs, se);
     fs.Close();

     

    エラーメッセージ: "XML ドキュメントを生成中にエラーが発生しました。"

     

    また同時にInvalidCastExceptionも発生しています。

    エラーメッセージ : "型 'System.Xml.Serialization.XmlSerializer' のオブジェクトを型 '(クラス名)' にキャストできません。"

     

    クラスの中に2次元配列が入ったものはタイプが取得できないとかあるのでしょうか?

    ご教授のほどをよろしくお願いします。

    2009年1月5日 8:57

回答

  • 例外を出してるのは typeof 演算子ではなく XmlSerializer コンストラクタでしょう。

    XmlSerializer は二次元以上の配列をサポートしていません。

    2009年1月5日 11:46
  •  kassyi さんからの引用

    2次元配列があるクラスのタイプを取得しようとするとInvalidOperationExceptionが発生してしまいます。

    (省略)

    エラーメッセージ: "XML ドキュメントを生成中にエラーが発生しました。"


    下記が参考になるかな。

     

    Microsoft Knowledge Base

    [PRB] ASP.NET で作成した XML Web サービスで多次元配列がサポートされません

     

     kassyi さんからの引用

    また同時にInvalidCastExceptionも発生しています。

    エラーメッセージ : "型 'System.Xml.Serialization.XmlSerializer' のオブジェクトを型 '(クラス名)' にキャストできません。"


    こちらは下記が問題なのかもしれません。
    # ご提示されたコードが写し間違いでなければ

     kassyi さんからの引用

     se.Serialize(fs, se);

     se.Serialize(fs, tc);
    2009年1月5日 18:30

すべての返信

  • 例外を出してるのは typeof 演算子ではなく XmlSerializer コンストラクタでしょう。

    XmlSerializer は二次元以上の配列をサポートしていません。

    2009年1月5日 11:46
  •  kassyi さんからの引用

    2次元配列があるクラスのタイプを取得しようとするとInvalidOperationExceptionが発生してしまいます。

    (省略)

    エラーメッセージ: "XML ドキュメントを生成中にエラーが発生しました。"


    下記が参考になるかな。

     

    Microsoft Knowledge Base

    [PRB] ASP.NET で作成した XML Web サービスで多次元配列がサポートされません

     

     kassyi さんからの引用

    また同時にInvalidCastExceptionも発生しています。

    エラーメッセージ : "型 'System.Xml.Serialization.XmlSerializer' のオブジェクトを型 '(クラス名)' にキャストできません。"


    こちらは下記が問題なのかもしれません。
    # ご提示されたコードが写し間違いでなければ

     kassyi さんからの引用

     se.Serialize(fs, se);

     se.Serialize(fs, tc);
    2009年1月5日 18:30
  • Hongliang さん、karashima さんどうもありがとうございました。

    XmlSerializer は多次元配列をサポートしていなかったんですね。

     

    てっきりtypeof演算子が例外を出しているのかと思い込んでしまってライブラリとにらめっこしていました。

    質問を出した後、XML形式だけでなくバイナリ形式でもクラスの内容が保存できることを知ってそっちで試してみたら

    多次元配列も格納できたっぽいのでバイナリ形式で保存したいと思います。

     

    みなさん、ありがとうございました。またお世話になることがありましたらどうぞよろしくお願いします。

    2009年1月6日 0:19