web-dev-qa-db-ja.com

C#の列挙型プロパティにXMLSerializeをどのように使用しますか?

私は簡単な列挙型を持っています:

_enum simple 
{ 
  one, 
  two, 
  three 
};
_

タイプsimpleのプロパティを持つクラスもあります。属性[XmlAttribute(DataType = "int")]で装飾してみました。ただし、XmlWriterを使用してシリアル化しようとすると失敗します。

これを行う適切な方法は何ですか?列挙型自体とプロパティをマークする必要がありますか?マークする場合は、どのデータ型でマークしますか?

28
Rhubarb

Darin Dimitrovの回答によると、私が指摘したいのは、列挙型フィールドのシリアル化方法を制御したい場合は、各フィールドを XmlEnum 属性で装飾できるということだけです。

public enum Simple
{
      [XmlEnum(Name="First")]
      one,
      [XmlEnum(Name="Second")]
      two,
      [XmlEnum(Name="Third")]
      three,
}
45
zebrabox

列挙型プロパティのシリアル化に問題はないはずです。

public enum Simple { one, two, three }

public class Foo
{
    public Simple Simple { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        using (var writer = XmlWriter.Create(Console.OpenStandardOutput()))
        {
            var foo = new Foo
            {
                Simple = Simple.three
            };
            var serializer = new XmlSerializer(foo.GetType());
            serializer.Serialize(writer, foo);
        }
    }
}

生成:

<?xml version="1.0" encoding="utf-8"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Simple>three</Simple>
</Foo>
23
Darin Dimitrov