小编Roc*_*cta的帖子

如何在C#中序列化/反序列化可选的XML枚举?

我试图弄清楚如何将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.

谢谢你尽你所能的帮助!

c# xml xml-serialization

7
推荐指数
1
解决办法
8601
查看次数

如何有选择地应用VSTemplate?

我正在为我的公司创建一个用于MVC 4应用程序的自定义VSTemplate,它使用的向导与创建新MVC4应用程序时出现的向导相当.当开发人员创建此类型的新应用程序时,我想要应用两个模板中的一个:

VS项目向导

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

Solution Explorer

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

谢谢!

visual-studio-templates vsix

2
推荐指数
1
解决办法
1050
查看次数