none
XMLシリアライズ時のタグの名前空間まとめあげ RRS feed

  • 質問

  • いつもお世話になっております。

    次のクラスをXMLシリアライズしました。


     [System.Xml.Serialization.XmlTypeAttribute( Namespace = "SampleNameSpace" )]
     public class SampleType
     {
      public string ID;
     }

     

     シリアライズは以下のように行ないました。


       SampleType[] sampleTypes = new SampleType[ 2 ];
       sampleTypes[ 0 ] = new SampleType();
       sampleTypes[ 0 ].ID = "1";
       sampleTypes[ 1 ] = new SampleType();
       sampleTypes[ 1 ].ID = "2";

       TextWriter textWriter = new StreamWriter( "SampleType.xml", false, System.Text.Encoding.Default );
       XmlSerializer xsTrans = new XmlSerializer( sampleTypes.GetType() );
       xsTrans.Serialize( textWriter, sampleTypes );

     

    出力されたXMLファイルは以下です。

    <?xml version="1.0" encoding="shift_jis"?>
    <ArrayOfSampleType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <SampleType>
        <ID xmlns="SampleNameSpace">1</ID>
      </SampleType>
      <SampleType>
        <ID xmlns="SampleNameSpace">2</ID>
      </SampleType>
    </ArrayOfSampleType>

     

    これを以下のように出力されるようにしたいのですが、どのようにすればよろしいでしょうか。宜しくお願い致します。

    <?xml version="1.0" encoding="shift_jis"?>
    <ArrayOfSampleType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:spl="SampleNameSpace">
      <SampleType>
        <spl:ID>1</spl:ID>
      </SampleType>
      <SampleType>
        <spl:ID>2</spl:ID>
      </SampleType>
    </ArrayOfSampleType>

     

    環境WinXP VS2005 C#2.0

     

    2006年12月6日 9:03

回答

すべての返信

  • 諸農です。

    XmlSerializerクラスのSerializeメソッドのオーバーロードバージョンで対応できそうな感じですが、いかがでしょうか。

    public void Serialize(Stream, object, XmlSerializerNamespaces);
    http://msdn2.microsoft.com/ja-jp/library/ms163161(VS.80).aspx

     

    2006年12月6日 11:54
  • ありがとうございました。以下の通り、解決いたしました。


       TextWriter textWriter = new StreamWriter( "SampleType.xml", false, System.Text.Encoding.Default );
       XmlSerializer xsTrans = new XmlSerializer( sampleTypes.GetType() );
       XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
       ns.Add( "spl", "SampleNameSpace");
       xsTrans.Serialize( textWriter, sampleTypes, ns );
       textWriter.Close();

    2006年12月6日 23:24