Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#XML序列化:多次分配相同的值_C#_Xml_Serialization_Enums - Fatal编程技术网

C#XML序列化:多次分配相同的值

C#XML序列化:多次分配相同的值,c#,xml,serialization,enums,C#,Xml,Serialization,Enums,我在一个项目中使用了枚举标志,并进行了大量的XML序列化。我希望能够为单个枚举参数分配多个不同的枚举标志。我遇到的问题是,值只能分配一次,而我希望能够分配多个枚举 我有一个使用字符串和数组的工作解决方案: [XmlElement("AddTags")] public string[] AddTags { set { if (value != null) foreach (string tag in value) {

我在一个项目中使用了枚举标志,并进行了大量的XML序列化。我希望能够为单个枚举参数分配多个不同的枚举标志。我遇到的问题是,值只能分配一次,而我希望能够分配多个枚举

我有一个使用字符串和数组的工作解决方案:

[XmlElement("AddTags")]
public string[] AddTags
{
    set
    {
        if (value != null)
            foreach (string tag in value)
            {
                if (tag.Contains(","))
                {
                    string[] split = tag.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string str in split)
                        Tags = (Tags | (int)EnumUtil.GetIndex<Tag>(str));
                }
                else
                    Tags = (Tags | (int)EnumUtil.GetIndex<Tag>(tag));
            }
    }
    get
    {
        return EnumUtil.GetNamesInTag<Tag>(Tags).ToArray();
    }
}
[xmlement(“AddTags”)]
公共字符串[]AddTags
{
设置
{
if(值!=null)
foreach(值中的字符串标记)
{
if(tag.Contains(“,”))
{
string[]split=tag.split(新字符[]{',},StringSplitOptions.RemoveEmptyEntries);
foreach(拆分中的字符串str)
Tags=(Tags |(int)EnumUtil.GetIndex(str));
}
其他的
Tags=(Tags |(int)EnumUtil.GetIndex(tag));
}
}
得到
{
返回EnumUtil.getnamestatg(Tags.ToArray();
}
}
这给了我想要的结果,除了我更喜欢只使用序列化枚举。用于此的XML如下所示:

<AddTags>Tag1</AddTags>
<AddTags>Tag2</AddTags>
Tag1
Tag2
和都可以设置为包含这些枚举标志的单个int

理想情况下,这将使用相同的XML:

[Flags]
public enum Tag
{
    Tag1     = 1 << 00,
    Tag2     = 1 << 01,
    Tag3     = 1 << 02,
}
public int Tags;
public Tag AddTags
{
    set
    {
        Tags = (Tags | (int)value);
    }
    get
    {
        return (Tag)Tags;
    }
}
[标志]
公共枚举标记
{

Tag1=1我喜欢这个想法,但是:我不认为
XmlSerializer
会支持它,除非你基本上伪造了一个自定义列表(这将是低效的,特别是在序列化时)。你的接口应该是一个字符串:public string AddTags然后从enum转换为string is.ToString()要从字符串转到枚举,可以使用(Tag)enum.Parse(Tag,“Tag1”)