将枚举序列化为int

Kar*_*der 6 .net enums xml-serialization

我希望通过一个Web服务返回以下类,该服务包含一个枚举类型作为其成员之一.

[Serializable, XmlRoot("GeoCoordinate")]
public class GeoCoordinate
{
    public enum AccuracyLevel
    {
        Unknown = 0,
        Country = 1,
        Region = 2,
        SubRegion = 3,
        Town = 4,
        PostalCode = 5,
        Street = 6,
        Intersection = 7,
        Address = 8,
        Premise = 9
    }

    private AccuracyLevel _accuracy;

    // ... more members


    public AccuracyLevel Accuracy
    {
        get { return _accuracy; } 
        set { _accuracy = value;}
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但会以下列形式返回结果:

<!-- ... -->
<Accuracy>Unknown or Country or Region or SubRegion or Town or 
  PostalCode or Street or Intersection or Address or Premise</Accuracy>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)

而不是表示枚举的字符串,我希望它只返回一个整数.这可以在不改变类型的情况下完成GeoCoordinate.Accuracy吗?

Kar*_*der 4

尽管这是一种黑客攻击,但我认为XmlEnumAttribute在这种情况下对每个枚举成员使用是最令人满意的。如果这个枚举更大,那么最好使用XmlIgnoreAccuracy 属性,并向该类添加一个额外的 int 属性,如该问题的另一个答案中所述。

UsngXmlEnumAttribute意味着只需要修改 enum 本身,并且无论在哪里使用它,xml 都会像 int 一样序列化。

    public enum AccuracyLevel
    {
        [XmlEnum("0")] Unknown = 0,
        [XmlEnum("1")] Country = 1,
        [XmlEnum("2")] Region = 2,
        [XmlEnum("3")] SubRegion = 3,
        [XmlEnum("4")] Town = 4,
        [XmlEnum("5")] PostalCode = 5,
        [XmlEnum("6")] Street = 6,
        [XmlEnum("7")] Intersection = 7,
        [XmlEnum("8")] Address = 8,
        [XmlEnum("9")] Premise = 9
    }
Run Code Online (Sandbox Code Playgroud)