< 明示的に実装されたインターフェースメンバにバインディングする | 添付プロパティにしちゃえばいいんじゃない ? >

January 8, 2009

<elem xmlns=''> は指定できません。

XmlSerializer でクラスの配列をシリアライズしたものをデシリアライズしようとしたら InvalidOperationException が発生してしまった。書いたコードは大雑把にはこんな感じ

public class Entry
{    
    // メンバは省略

    /// <summary>
    /// Xml より Entry の配列を読み込むメソッド
    /// </summary>
    /// <param name="path">Xml ファイルのパス</param>
    /// <returns>読み込んだ Entry 型の配列</returns>
    public static Entry [] LoadEntries (string path)
    {
        var serializer = new System.Xml.Serialization.XmlSerializer (typeof (Entry []), new System.Xml.Serialization.XmlRootAttribute ("Entries"));
        var stream = new System.IO.StreamReader (path, Encoding.Default);
        var entries = serializer.Deserialize (stream) as Entry [];
        stream.Close ();
        return entries;
    }

    static void Main (string [] args)
    {
        var entries = LoadEntries ("c:\\test.xml");
    }
}

Exception の Message は「XML ドキュメント (2,2) でエラーが発生しました。」、さらに InnerException の Message は「<elem xmlns=''> は指定できません。」読み込もうとした XML ファイルを開いてみると、確かにデフォルトの名前空間は指定されていない。あれー ? でもこれ、同じクラスをシリアライズして生成したファイルなんだけど…。

しばし悩んでたけど、原因は結局こちら。

var serializer = new System.Xml.Serialization.XmlSerializer (typeof (Entry []), new System.Xml.Serialization.XmlRootAttribute ("Entries"));

ルート要素の名前を指定しているが、ファイル内の実際のルート要素と違っちゃってた。ただそれだけだった。

ちなみに、対応する英語の Message は「 There is an error in XML document (2, 2). 」と「<elem xmlns=''> was not expected. 」だと思われる。

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/2286

コメント

こんにちは、こんな時に何ですが、トイレの故障で困った経験はありません?
私は、小さな店を営んでますが、トイレが水漏れを起こしたとお客様からのクレームで、営業中の事だったため、対応に苦慮致しました。
従業員が水漏れの原因を調査し、直そうと試みたのですが、結局直らず・・困り果てています。

そんな時、プロの専門業者さんに原因を特定してもらおうとGoogleで検索したところ、水トラブルを比較する専門サイトがあったので、会社を複数検討してみようかと思っています。

このHPはとても親切で、詳しく情報が掲載されており概算料金、対応エリア、対応する時間など・・知りたい情報が満載で、非常にわかりやすく、比較サイト、HPにしては、便利で、重宝しています。

でも本音を言うと、比較対象の業者が多くて、迷いに迷っています(苦笑)
結論を出すのは非常に難しいかなぁ(笑)

そんな事は知らない!ですよね(苦笑)

私は手前味噌ですが、決断力と自信はある方だと思うので、普段はあまり物事に対して迷うことはないのですが、さすがにこれだけたくさんのサイトがあると、迷ってしまいます。

皆さんは、トイレの水漏れによるこんな経験はありませんか。
もし、あったのなら、あなたの経験を教えてほしいです。

教えていただいても、私は、無力なのであなたのお役に立つことはできないかも知れませんが、私のWEBサイトから情報の発信を行い、同じ悩みを持つ同士に対して、問題解決のヒントを分かち合える様に、情報をシェアして行きたいと思います。

今後共、どうぞよろしくお願い致します。

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?