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

期待那一天艳

期待那一天艳

2016-02-19 20:59

下面图老师小编跟大家分享通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

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

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

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

  
  于是将他插入到ListEntity对象中

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

          public static string SerializeBusinessObject(ListBusinessObject 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 = SerializeEntity(list);
   生成的XML文件为:

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

          public static ListBusinessObject DeserializeBusinessObject(string XmlStr)
          {
              ListBusinessObject result = new ListBusinessObject();
              XmlDocument XmlDoc = new XmlDocument();
              XmlDoc.LoadXml(XmlStr);
              foreach (XmlNode ItemNode in XmlDoc.GetElementsByTagName("Root").Item(0).ChildNodes)
              {
                  BusinessObject item = Activator.CreateInstanceBusinessObject();
                  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;
          }
   然后我们调用这个方法:

  ListEntity list = DeserializeEntity(str);
   完了。

  本文只是给大家介绍了序列化List对象的简单方法,用的时候要根据自己的情况而定。
  http://www.cnblogs.com/kchen/archive/2006/11/04/550382.html

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

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

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

深入理解Java对象的序列化与反序列化的应用

编程语言 网络编程
深入理解Java对象的序列化与反序列化的应用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

序列化FastReport

编程语言 网络编程
序列化FastReport

java 序列化对象 serializable 读写数据的实例

编程语言 网络编程
java 序列化对象 serializable 读写数据的实例

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

PHP中的串行化变量和序列化对象

PHP
PHP中的串行化变量和序列化对象

J2SE中的序列化之接受默认序列化

编程语言 网络编程
J2SE中的序列化之接受默认序列化

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Windows XP系统常用的内置AT命令

Windows XP系统常用的内置AT命令

Java关键字new和newInstance的区别方法

Java关键字new和newInstance的区别方法
下拉加载更多内容 ↓