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
吗?
尽管这是一种黑客攻击,但我认为XmlEnumAttribute
在这种情况下对每个枚举成员使用是最令人满意的。如果这个枚举更大,那么最好使用XmlIgnore
Accuracy 属性,并向该类添加一个额外的 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)