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