C# xml可序列化多值枚举

代码:

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
    }
}

使用:

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)

其他扩展:

可序列化接口:http://www.cnblogs.com/hont/p/4162448.html

序列化助手类:http://www.cnblogs.com/hont/p/3959854.html

时间: 2024-10-09 01:15:47

C# xml可序列化多值枚举的相关文章

android XML文件序列化

XML 在Android中应用的相当多啊,所以掌握一些XML的序列化及解析还是很有必要的. XmlSerializer serializer = Xml.newSerializer();        //生成一个XML 序列化器 File file = new File(Environment.getExternalStorageDirectory(),"backup.xml"); FileOutputStream fos = new FileOutputStream(file);

C#实现复杂XML的序列化与反序列化

这篇文章主要介绍了C#实现复杂XML的序列化与反序列化的方法,是非常实用的一个技巧,需要的朋友可以参考下 本文以一个实例的形式讲述了C#实现复杂XML的序列化与反序列化的方法.分享给大家供大家参考.具体方法如下: 已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. Default.XML文件如下: <?xml version="1.0" encoding="utf-8" ?> <config> <rule

Day01—xml的序列化、xml的pull解析

1.xml的序列化 FileOutputStream os = new FileOutputStream(new File(getFilesDir(),"hai.xml")); //1.获取xml序列化器 XmlSerializer xmlSerializer = Xml.newSerializer(); //2.开始序列化输出流 xmlSerializer.setOutput(os,"utf-8");//os---Outputm,xml文件的写出流,文件的编码格式

通过XmlSerializer 实现XML的序列化与反序列化

通过XmlSerializer 我们可以十分简单的将Model与XML进行转换 官文在点这里 帮助类 1 using System; 2 using System.Text; 3 using System.Xml.Serialization; 4 using System.IO; 5 using System.Xml; 6 7 namespace BLL 8 { 9 public class XmlHelper 10 { 11 public static T DeSerializeModels<

C# XML对象序列化、反序列化 - PEPE YU

http://www.tuicool.com/articles/IjE7ban XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法 使用LINQ TO XML或者反序列化的方法从XML中读取数据. 最简单的方法就是 .net framework提供的,只需要定义好xml数据格式,定义好对象即可. 1.调用方法: using RenosData.RDBao.EvidenceUploadModel.Models; using RenosData.RDBao.Evi

WebServices中Xml的序列化

一.定义序列化实体类 [System.Xml.Serialization.XmlRoot("Custome_Xml_Root_Name")] //自定义生成的Xml根目录名称 public class Customer { [System.Xml.Serialization.XmlAttribute("Customer_Xml_Root_Atrribute_Name")] //自定义生产的Xml根目录属性名称 public int ID { get; set; }

swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念

***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil 不管是普通简单值类型还是引用类型 那我就是要让这个属性默认值为空,为nil 怎么办呢,很简单,用语法,在定义这个属性的时,在类型后面声明一个? 这样就表示这个属性除了指定类型的默认值外还可以是一个可为空的类型 在Java中,最常见的错误类型就是NullPoinExecption, 为什么就是要有Nu

xml里面product的值在哪里设置的?

转载请注明出处:http://blog.csdn.net/droyon/article/details/39890469 在进行Android应用程序开发时,善于运用xml中的product配置,能够达到优化代码的目的. 比如:我们须要一个依据设备是否含有模拟sd卡存储区,显示不同的描写叙述的需求,一般来说,我们须要这样来实现: <string name="filter_apps_onsdcard">"含有模拟SD卡"</string> &l

C#.net XML的序列化与反序列化

/// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化的对象</param> /// <param name="encoding">编码方式</param> /// <returns>序列化产生的XML字符串</returns> public static string Seria