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

时间:2019-07-03 13:39:16

标签: c# xml serialization enums

我在一个正在处理的项目中使用枚举标志,并且进行了许多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();
    }
}

这给了我想要的结果,除了我更喜欢只使用一个序列化的枚举。 XML如下所示:

<AddTags>Tag1</AddTags>
<AddTags>Tag2</AddTags>

所有设置为一个包含所有这些枚举标志的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;
    }
}

不幸的是,xml只会分配一次AddTag,而无论分配多少次,因为AddTags不再是数组。我希望能够使用相同的xml多次分配此值,而无需创建数组,因为我觉得那太复杂了。谢谢。

0 个答案:

没有答案