¿Cómo serializar / deserializar la enumeración XML opcional en C #?

Estoy tratando de averiguar cómo serializar / deserializar una lista XML a C # que tiene un atributo opcional que es un tipo enumerado. La siguiente es mi clase de C #:

public class AttributeAssignmentExpressionElement : XACMLElement
{
    [XmlAttribute]
    public string AttributeId { get; set; }

    [XmlAttribute]
    public Category Category { get; set; }                   
}

MiCategory La enumeración se define de la siguiente manera:

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
}  

CuandoCategory está presente en el archivo XML correspondiente, la serialización / deserialización funciona como se esperaba. Sin embargo si elCategory falta en el XML, se utiliza el valor predeterminado (primer elemento en la enumeración). Si intento hacer que la variable enumerada sea nulable (Category?), el deserializador lanza una excepción porque no puede deserializar un tipo complejo. Dado el siguiente XML (que no contiene el atributo), ¿cómo puedo serializar la enumeración apropiadamente?

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

En esta situación, el valor en el objeto deserializado debe ser nulo.

¡Gracias por cualquier ayuda que pueda ofrecer!

Respuestas a la pregunta(3)

Su respuesta a la pregunta