Я пытаюсь понять, как сериализовать/десериализовать 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?
), десериализатор выдаст исключение, поскольку он не может десериализовать сложный тип. Учитывая следующий XML (который не содержит атрибута), как я могу правильно сериализовать перечисление?
<AttributeAssignmentExpression
AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">
</AttributeAssignmentExpression>
В этой ситуации значение в десериализованном объекте должно быть нулевым.
Спасибо за любую помощь!