【发布时间】:2012-05-31 19:39:39
【问题描述】:
我试图弄清楚如何将 XML 列表序列化/反序列化为 C#,该列表具有枚举类型的可选属性。以下是我的 C# 类:
public class AttributeAssignmentExpressionElement : XACMLElement
{
[XmlAttribute]
public string AttributeId { get; set; }
[XmlAttribute]
public Category Category { get; set; }
}
我的Category枚举定义如下:
public enum Category
{
[XmlEnum(Name = "urn:oasis:names:tc:xacml:1.0:subject-category:access-subject")]
Subject,
[XmlEnum(Name = "urn:oasis:names:tc:xacml:3.0:attribute-category:resource")]
Resource,
[XmlEnum(Name = "urn:oasis:names:tc:xacml:3.0:attribute-category:action")]
Action,
[XmlEnum(Name = "urn:oasis:names:tc:xacml:3.0:attribute-category:environment")]
Environment
}
当Category 出现在相应的 XML 文件中时,序列化/反序列化按预期工作。但是,如果 XML 中缺少 Category,则使用默认值(枚举中的第一项)。如果我尝试将枚举变量设为可空 (Category?),则反序列化程序会抛出异常,因为它无法反序列化复杂类型。给定以下 XML(不包含该属性),如何适当地序列化枚举?
<AttributeAssignmentExpression
AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">
</AttributeAssignmentExpression>
在这种情况下,反序列化对象中的值应该为null。
感谢您提供的任何帮助!
【问题讨论】:
标签: c# xml xml-serialization