Как сериализовать/десериализовать необязательное перечисление 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-файле, сериализация/десериализация работает должным образом. Однако если Категорияотсутствует в XML, используется значение по умолчанию (первый элемент в перечислении). Если я попытаюсь сделать перечисляемую переменную обнуляемой ( Category?), десериализатор выдаст исключение, поскольку он не может десериализовать сложный тип. Учитывая следующий XML (который не содержит атрибута), как я могу правильно сериализовать перечисление?

<AttributeAssignmentExpression
    AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">       
</AttributeAssignmentExpression>

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

Спасибо за любую помощь!

7
задан Rockdocta 31 May 2012 в 19:39
поделиться