C#XML序列化:多次分配相同的值
我在一个项目中使用了枚举标志,并进行了大量的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) {
[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”)