您的位置:首页 > 编程语言 > C#

C# xml可序列化多值枚举脚本

2016-02-17 16:22 405 查看
代码:

using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace Hont
{
[XmlRoot("SerizlizableMultipleValueEnum"), Serializable]
public class SerizlizableMultipleValueEnum<TEnum> : IXmlSerializable
where TEnum : IConvertible
{
TEnum mEnumValue;

public TEnum EnumValue { get { return mEnumValue; } }

public SerizlizableMultipleValueEnum()
{
}

public SerizlizableMultipleValueEnum(TEnum enumValue)
{
this.mEnumValue = enumValue;
}

#region IXmlSerializable Members

public XmlSchema GetSchema()
{
return null;
}

public void ReadXml(XmlReader reader)
{
var typeSer = new XmlSerializer(typeof(int));

bool wasEmpty = reader.IsEmptyElement;
reader.Read();

if (wasEmpty)
return;
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.ReadStartElement("EnumValue");
mEnumValue = (TEnum)typeSer.Deserialize(reader);
reader.ReadEndElement();

reader.MoveToContent();
}
reader.ReadEndElement();
}

public void WriteXml(XmlWriter writer)
{
var typeSer = new XmlSerializer(typeof(int));

writer.WriteStartElement("EnumValue");
typeSer.Serialize(writer, Convert.ToInt32(mEnumValue));
writer.WriteEndElement();
}

#endregion
}
}


View Code

使用:

mTestValue = new SerizlizableMultipleValueEnum<MyEnum>(MyEnum.Value1 | MyEnum.Value2);
var str = XmlSerializationHelper.SerializationToString(mTestValue);

Console.WriteLine(str);

mTestValue = XmlSerializationHelper.DeSerializationFromString<SerizlizableMultipleValueEnum<MyEnum>>(str);
Console.WriteLine(mTestValue.EnumValue);
//print 6.(value1 is 2, value2 is 4)


其他扩展:

可序列化接口:/article/5238756.html

序列化助手类:/article/5238733.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: