我试图弄清楚如何将XML列表序列化/反序列化为C#,它具有枚举类型的可选属性.以下是我的C#类:
public class AttributeAssignmentExpressionElement : XACMLElement
{
[XmlAttribute]
public string AttributeId { get; set; }
[XmlAttribute]
public Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的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
}
Run Code Online (Sandbox Code Playgroud)
当Category相应的XML文件中存在时,序列化/反序列化按预期工作.但是,如果CategoryXML中缺少该值,则使用默认值(枚举中的第一项).如果我尝试使枚举变量为nullable(Category?),则反序列化器会抛出异常,因为它无法反序列化复杂类型.给定以下XML(不包含该属性),如何正确地序列化枚举?
<AttributeAssignmentExpression
AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">
</AttributeAssignmentExpression>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,反序列化对象中的值应为null.
谢谢你尽你所能的帮助!
我正在为我的公司创建一个用于MVC 4应用程序的自定义VSTemplate,它使用的向导与创建新MVC4应用程序时出现的向导相当.当开发人员创建此类型的新应用程序时,我想要应用两个模板中的一个:

这两个条目都对应于我的VSIX项目中名为ProjectTemplates的文件夹中定义的模板:

我的问题是,如何在向导运行时应用正确的模板?我知道如何使用多个项目创建一个vstemplate(使用vstemplate中的ProjectCollection节点),但这不是我想要做的,因为它们永远不会一起部署.我看到我可以将vstemplates作为Assets添加到我的vsixmanifest文件中,但我不确定如何有条件地仅应用一个模板.
谢谢!