列挙型であるオプションの属性を持つC#にXMLリストをシリアル化/逆シリアル化する方法を理解しようとしています。以下は私の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
}
対応するXMLファイルにが存在する場合Category
、シリアル化/逆シリアル化は期待どおりに機能します。ただしCategory
、XMLにが欠落している場合は、デフォルト値が使用されます(列挙の最初の項目)。列挙型をnull許容()にしようとするとCategory?
、複合型を逆シリアル化できないため、デシリアライザーは例外をスローします。次のXML(属性を含まない)がある場合、列挙を適切にシリアル化するにはどうすればよいですか?
<AttributeAssignmentExpression
AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">
</AttributeAssignmentExpression>
この状況では、逆シリアル化されたオブジェクトの値はnullである必要があります。
あなたが提供できるどんな助けにも感謝します!