何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 36015
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

XmlSerializer.Serialize メソッドを使うと、ルート要素に名前空間が追加されます。


<?xml version="1.0"?>
<root xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</root>

これを、抑制する方法。

オーバーロードされた Serialize メソッドに、XmlSerializerNamespaces クラスのインスタンスを受け取るものがあります。ここに null を指定したり、何も追加していないインスタンスを指定しても、やはり規定の名前空間が出力されます。ステップインしてコードを見ると、nullCount が0の時は、規定の名前空間に置き換えるというコードが書かれていました。

ところが、XmlSerializerNamespaces クラスへの名前空間の追加については、なんのチェックもされていないようです(未確認)。ということで、空文字列の名前空間を追加したインスタンスを指定してあげます。


XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
// null または、個数が0個だと、規定の名前空間が追加されるので、1個にする。
ns.Add("", "");
XmlSerializer xs = new XmlSerializer(typeof(TYPE));
using (StreamWriter writer = new StreamWriter(fileName, false)) {
    xs.Serialize(writer, object, ns);
    writer.Flush();
    writer.Close();
}

<?xml version="1.0"?>
<root>
</root>

xmlns:xsd="http://www.w3.org/2001/XMLSchema"」を、「xmlns="http://www.w3.org/2001/XMLSchema"」の様に出力させたいと思って、「ns.Add("", "http://www.w3.org/2001/XMLSchema");」としたら、なんにも出力されなくなったので気がついたのでした。

投稿日時 : 2011年1月19日 22:02
コメント
タイトル
名前
Url
コメント