Как сериализовать / десериализовать необязательное перечисление 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>

В этой ситуации значение в десериализованном объекте должно быть нулевым.

Спасибо за любую помощь, которую вы можете предложить!

Ответы на вопрос(3)

Ваш ответ на вопрос