通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法

对象|集合|数据

通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法

我们在平时使用数据库的时候,经常会碰到一个问题,就是不希望数据实体对象插入数据库中, 却有想持久化的时候,那么就可以用序列化成

XML字符串,来保存到其他地方,由于生成的是字符串,所以可以保存到任意我们想保存的地方。比如 asp.net的ViewState,cookie,cache等。

首先,我们定义一个数据实体类。

    class Entity
    {
        public Entity()
        {}
        private int id;
        public int Id
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }

        private double price;
        public double Price
        {
            get
            {
                return price;
            }
            set
            {
                price = value;
            }
        }
    }

于是将他插入到List<Entity>对象中

    List<Entity> list = new List<Entity>();
    Entity obj = new Entity();
    obj.Id = 1;
    obj.Name = "test";
    obj.Price = 3.23;
    list.Add(obj);
 这样,一个List<Entity>对象就创建成功了,下面我们来将他序列化

        public static string Serialize<BusinessObject>(List<BusinessObject> GenericList)
        {
            XmlDocument result = new XmlDocument();
            result.LoadXml("<Root></Root>");
            foreach (BusinessObject obj in GenericList)
            {
                XmlElement Item = result.CreateElement("Item");
                PropertyInfo[] properties = obj.GetType().GetProperties();
                foreach (PropertyInfo property in properties)
                {
                    if (property.GetValue(obj, null) != null)
                    {
                        XmlElement element = result.CreateElement(property.Name);
                        element.SetAttribute("Type", property.PropertyType.Name);
                        element.InnerText = property.GetValue(obj, null).ToString();
                        Item.AppendChild(element);
                    }
                }
                result.DocumentElement.AppendChild(Item);
            }
            return result.InnerXml;
        }
 然后我们调用这个方法

string str = Serialize<Entity>(list);
 生成的XML文件为:

    <Root>
        <Item>
            <Id Type="Int32">1</Id>
            <Name Type="String">test</Name>
            <Price Type="Double">3.23</Price>
        </Item>
    </Root>
下面,我们根据上面生成的xml文件,将他反序列化,生成刚才的List<Entity>对象

        public static List<BusinessObject> Deserialize<BusinessObject>(string XmlStr)
        {
            List<BusinessObject> result = new List<BusinessObject>();
            XmlDocument XmlDoc = new XmlDocument();
            XmlDoc.LoadXml(XmlStr);
            foreach (XmlNode ItemNode in XmlDoc.GetElementsByTagName("Root").Item(0).ChildNodes)
            {
                BusinessObject item = Activator.CreateInstance<BusinessObject>();
                PropertyInfo[] properties = typeof(BusinessObject).GetProperties();
                foreach (XmlNode propertyNode in ItemNode.ChildNodes)
                {
                    string name = propertyNode.Name;
                    string type = propertyNode.Attributes["Type"].Value;
                    string value = propertyNode.InnerXml;
                    foreach (PropertyInfo property in properties)
                    {
                        if (name == property.Name)
                        {
                            property.SetValue(item,Convert.ChangeType(value,property.PropertyType), null);
                        }
                    }
                }
                result.Add(item);
            }
            return result;
        }
 然后我们调用这个方法:

List<Entity> list = Deserialize<Entity>(str);
 完了。

本文只是给大家介绍了序列化List<>对象的简单方法,用的时候要根据自己的情况而定。

时间: 2024-08-03 02:18:27

通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法的相关文章

[Java开发之路](9)对象序列化与反序列化

1. 对象序列化 当你创建对象时,只要你需要,它会一直存在,但是程序终止时,无论何时它都不会继续存在.尽管这样做是非常有意义的,但是在某些情况下,如果程序不运行时扔能存在并且保存其信息,那将对我们非常有用.这样,在下次程序运行时,该对象将被重建并且拥有的信息与程序上次运行时它所拥有的信息相同.当然,我们也可以通过将信息写入文件或者数据库,但是如果能将一个对象声明为是"持久性"的,并为我们处理掉所有的细节,这将会显得十分方便. Java的序列化是将那些实现了Serializable接口的

c#数据的序列化和反序列化(推荐版)_C#教程

开始用的.net 自带的DataContractJsonSerializer进行序列化和反序列化,当代码写完以后,调试,我X(原谅我的脏话,因为确实让我生气),实体因为有[DataContractAttribute(IsReference=true )] 这样一个属性,提示不能序列化,当然手改一下啦,改完以后,提示基类EntityObject 的这个属性不可以 MY God!! 后来也是因为DataContractJsonSerializer 反序列化成集合的时候不好使,所以才下定决心废弃.采用

XML和实体序列化和反序列化

近来的项目中用到了序列化就抽空学习了一下,拿出来给大家分享一下: 类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容: 公共类的公共读写字段或者属性 XmlElement对象 XmlNode对象 Dataset对象 实现了Icollection 或IEnumerable的类 该类在设计中有一个设计需求: 需要被序列化的类要提供一个空参数的构造函数,否则运行时会出现异常 在开发过程中可能会有很多地方要用到对象和XML相互转化,

一起谈.NET技术,XML和实体序列化和反序列化

近来的项目中用到了序列化就抽空学习了一下,拿出来给大家分享一下: 类为我们提供了自己对象串行化(Serialize)和反串行化(Deserialize)的xml的方法,该类可以序列化的内容: 公共类的公共读写字段或者属性 XmlElement对象 XmlNode对象 Dataset对象 实现了Icollection 或IEnumerable的类 该类在设计中有一个设计需求: 需要被序列化的类要提供一个空参数的构造函数,否则运行时会出现异常 在开发过程中可能会有很多地方要用到对象和XML相互转化,

C# 实体类序列化与反序列化一 (XmlSerializer)

/// <summary> /// 实体类序列化的反序列化的类 /// </summary> /// <typeparam name="T"></typeparam> public abstract class EntityClassXmlSerializer<T> { /// <summary> /// 实体类序列化成xml string /// </summary> /// <param na

C#实现XML与实体类之间相互转换的方法(序列化与反序列化)_C#教程

本文实例讲述了C#实现XML与实体类之间相互转换的方法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Xml; using System.Xml.Serialization; /// <summary> /// Xml序列化与反序列化 //

Bond —— 微软高性能数据序列化和反序列化库

Bond 是一个扩展框架,用来处理系统化数据,特别适合用来处理与大数据存储和处理服务的通讯. Bond 定义了一个丰富的类型系统和 schema 版本化规则,允许向前向后兼容.核心特性包括高性能序列化和反序列化,非常强大的通用数据传输机制.该框架是高可扩展性的,通过可插入式的序列化协议.数据流和用户定义的类型别名等. 文章转载自 开源中国社区 [http://www.oschina.net]

WCF 序列化与反序列化复杂类型(DataContractSerializer)

作者:jiankunking 出处:http://blog.csdn.net/jiankunking .NET的类型可以分为两种:声明类型和真实类型.我们提倡面向接口的编程,对象的真实类型往往需要在运行时才能确定,在编程的时候往往只需要指明类型的声明类型,比如类型实现的接口或者抽象类.当我们使用基于接口或者抽象类创建的DataContractSerializer去序列化一个实现了该接口或者继承该抽象类的实例的时候,往往会因为对对象的真实类型无法识别造成不能正常地序列化.  现在,我们定义两个带数

C#JSON序列化与反序列化

原文:C#JSON序列化与反序列化 windows phone学习也有一段时间了,想要做一个新闻客户端练练手,于是就在网上找看有没有接口之类.在天狗播客找到了热点热词新闻资讯API开放接口,接口提供的是JSON格式的数据,由于之前没用过JSON,于是就在网上各种查.技术讨论群上各种问...... 废话不多说了,下面把我收获分享出来.望像我一样的小白少走弯路. 一个实体类 public class NewsModel { public string Title { get; set; } publ