4

XmlSerializer作業中のXNAプロジェクトを介して、整数の多次元配列をシリアル化しようとしているときに問題が発生しました。他のすべてのデータ(ブール値、文字列、さらには色など)を問題なくシリアル化できます。XmlSerializerまた、整数の(一次元の)配列もネイティブに処理すると主張する人がたくさんいます。多次元配列に関する制限はありますか、それともここで何か他のことが起こっていますか?

関連するコードは次のとおりです。

int[,,] scoredata = scores;  // Populated with data elsewhere 

filename = Path.Combine(container.Path, "scoredata.sav"); 
stream = File.Open(filename, FileMode.Create); 
serializer = new XmlSerializer(typeof(int[,,])); 
serializer.Serialize(stream, scoredata);  // This line throws the exception. 
stream.Close(); 

私が受け取る例外は

タイプ'System.InvalidOperationException'の未処理の例外がSystem.Xml.dllで発生しました。XMLドキュメントの生成中にエラーが発生しました。

この配列を構造体(他のすべてのプレーヤーデータが格納されている場所)のメンバー変数として使用しようとしましたが、そのようにすると同じ例外が発生し、それは単純な構文エラーなど。

一次元配列を介してシリアル化するためにコードを再構築する必要がありますか、それとも見落としているものがありますか?

前もって感謝します!

4

2 に答える 2

12

内部の例外を読んでください:

  • タイプ「SomeType」を反映するエラーがありました。タイプ'System.Int32[,,]'のメンバー'SomeType.Data'をシリアル化できません。詳細については、内部例外を参照してください。
  • System.Int32[,,]タイプのオブジェクトをシリアル化できません。多次元配列はサポートされていません。

したがって、いいえ:多次元配列は単にサポートされていません。あなたはそれを一次元配列としてシムスルーしなければならないかもしれません...あなたは翻訳をする別のプロパティを持つことによってこれを行うことができます:

[XmlIgnore]
public int[, ,] Data { get; set; }

[XmlElement("Data"), Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public int[] DataDto
{
    get { /* flatten from Data */ }
    set { /* expand into Data */ }
} 
于 2009-02-16T16:17:02.347 に答える