【C#】【XML】XML Serializeで、xmlnsなどの余計なタグを削除する

■ サンプル

Person.cs

XML Serializeを行う対象クラス
[Serializable()]
public class Person
{
    public Person()
    {
        this.Company = new Company();
    }

    public int id;
    public string Name { get; set; }
    public int Age { get; set; }
    [XmlIgnoreAttribute] // シリアル化しないようにする
    public string Sex { get; set; }
    [XmlElement("国")] // 要素名を変更する
    public string Country { get; set; }
    public Company Company { get; set; }
}

Company.cs

public class Company
{
    public string CompanyName { get; set; }
}

■ xmlnsなどの余計なタグを削除しないパターン

https://blogs.yahoo.co.jp/dk521123/22166698.html
と同じ。
BindingList<Person> list = new BindingList<Person>();

private void button1_Click(object sender, EventArgs e)
{
    Person person = new Person();
    person.Name = this.textBox1.Text;
    person.Age = Int32.Parse(this.textBox2.Text);
    person.Sex = this.comboBox1.Text;
    person.Country = this.textBox3.Text;
    person.Company.CompanyName = this.textBox4.Text;

    this.list.Add(person);

    this.OutputObjectIntoXml(this.list, @"C:\test1.xml");
}

private void OutputObjectIntoXml<T>(T t,string path)
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

    using (FileStream fs = new FileStream(path, FileMode.Create))
    {
        xmlSerializer.Serialize(fs, t);
    }
}

■ xmlnsなどの余計なタグを削除するパターン

private void button2_Click(object sender, EventArgs e)
{
    Person person = new Person();
    person.Name = this.textBox1.Text;
    person.Age = Int32.Parse(this.textBox2.Text);
    person.Sex = this.comboBox1.Text;
    person.Country = this.textBox3.Text;
    person.Company.CompanyName = this.textBox4.Text;

    this.list.Add(person);

    this.OutputObjectIntoXmlEx(list, @"C:\test2.xml");
}

private void OutputObjectIntoXmlEx<T>(T t, string path)
{
    XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
    xmlSerializerNamespaces.Add(String.Empty, String.Empty); 

    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

    using (FileStream fs = new FileStream(path, FileMode.Create))
    {
        xmlSerializer.Serialize(fs, t, xmlSerializerNamespaces);
    }
}

出力

出力1:test1.xml
<?xml version="1.0"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="">http://www.w3.org/2001/XMLSchema">
  <Person>
    <id>0</id>
    <Name>Mike</Name>
    <Age>23</Age>
    <国>Japan</国>
    <Company>
      <CompanyName>ABC com</CompanyName>
    </Company>
  </Person>
</ArrayOfPerson>
出力2:test2.xml
<?xml version="1.0"?>
<ArrayOfPerson>
  <Person>
    <id>0</id>
    <Name>Mike</Name>
    <Age>23</Age>
    <国>Japan</国>
    <Company>
      <CompanyName>ABC com</CompanyName>
    </Company>
  </Person>
</ArrayOfPerson>


関連記事

XML関連

C#XMLファイルを扱うには ~ 入門編 ~
https://blogs.yahoo.co.jp/dk521123/32868509.html
C#XMLシリアライズ・デシリアライズ ~ XmlSerializerクラス ~
https://blogs.yahoo.co.jp/dk521123/22166698.html