首页 > 其他 > 详细

List 序列化

时间:2014-03-04 04:24:15      阅读:451      评论:0      收藏:0      [点我收藏+]
序列化list
http://kchen.cnblogs.com/

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

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

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

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

bubuko.com,布布扣    class Entity
bubuko.com,布布扣   
{
bubuko.com,布布扣       
public Entity()
bubuko.com,布布扣       
{}
bubuko.com,布布扣       
private int id;
bubuko.com,布布扣       
public int Id
bubuko.com,布布扣       
{
bubuko.com,布布扣           
get
bubuko.com,布布扣           
{
bubuko.com,布布扣               
return id;
bubuko.com,布布扣            }

bubuko.com,布布扣           
set
bubuko.com,布布扣           
{
bubuko.com,布布扣                id
= value;
bubuko.com,布布扣            }

bubuko.com,布布扣        }

bubuko.com,布布扣       
private string name;
bubuko.com,布布扣       
public string Name
bubuko.com,布布扣       
{
bubuko.com,布布扣           
get
bubuko.com,布布扣           
{
bubuko.com,布布扣               
return name;
bubuko.com,布布扣            }

bubuko.com,布布扣           
set
bubuko.com,布布扣           
{
bubuko.com,布布扣                name
= value;
bubuko.com,布布扣            }

bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣       
private double price;
bubuko.com,布布扣       
public double Price
bubuko.com,布布扣       
{
bubuko.com,布布扣           
get
bubuko.com,布布扣           
{
bubuko.com,布布扣               
return price;
bubuko.com,布布扣            }

bubuko.com,布布扣           
set
bubuko.com,布布扣           
{
bubuko.com,布布扣                price
= value;
bubuko.com,布布扣            }

bubuko.com,布布扣        }

bubuko.com,布布扣    }

bubuko.com,布布扣
bubuko.com,布布扣

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

bubuko.com,布布扣    List<Entity> list = new List<Entity>();
bubuko.com,布布扣    Entity obj
= new Entity();
bubuko.com,布布扣    obj.Id
= 1;
bubuko.com,布布扣    obj.Name
= "test";
bubuko.com,布布扣    obj.Price
= 3.23;
bubuko.com,布布扣    list.Add(obj);

这样,一个List<Entity>对象就创建成功了,下面我们来将他序列化

bubuko.com,布布扣        public static string Serialize<BusinessObject>(List<BusinessObject> GenericList)
bubuko.com,布布扣       
{
bubuko.com,布布扣            XmlDocument result
= new XmlDocument();
bubuko.com,布布扣            result.LoadXml(
"<Root></Root>");
bubuko.com,布布扣           
foreach (BusinessObject obj in GenericList)
bubuko.com,布布扣           
{
bubuko.com,布布扣                XmlElement Item
= result.CreateElement("Item");
bubuko.com,布布扣                PropertyInfo[] properties
= obj.GetType().GetProperties();
bubuko.com,布布扣               
foreach (PropertyInfo property in properties)
bubuko.com,布布扣               
{
bubuko.com,布布扣                   
if (property.GetValue(obj, null) != null)
bubuko.com,布布扣                   
{
bubuko.com,布布扣                        XmlElement element
= result.CreateElement(property.Name);
bubuko.com,布布扣                        element.SetAttribute(
"Type", property.PropertyType.Name);
bubuko.com,布布扣                        element.InnerText
= property.GetValue(obj, null).ToString();
bubuko.com,布布扣                        Item.AppendChild(element);
bubuko.com,布布扣                    }

bubuko.com,布布扣                }

bubuko.com,布布扣                result.DocumentElement.AppendChild(Item);
bubuko.com,布布扣            }

bubuko.com,布布扣           
return result.InnerXml;
bubuko.com,布布扣        }

然后我们调用这个方法

bubuko.com,布布扣string str = Serialize<Entity>(list);

生成的XML文件为:

bubuko.com,布布扣    <Root>
bubuko.com,布布扣       
<Item>
bubuko.com,布布扣           
<Id Type="Int32">1</Id>
bubuko.com,布布扣           
<Name Type="String">test</Name>
bubuko.com,布布扣           
<Price Type="Double">3.23</Price>
bubuko.com,布布扣       
</Item>
bubuko.com,布布扣   
</Root>

下面,我们根据上面生成的xml文件,将他反序列化,生成刚才的List<Entity>对象

bubuko.com,布布扣        public static List<BusinessObject> Deserialize<BusinessObject>(string XmlStr)
bubuko.com,布布扣       
{
bubuko.com,布布扣            List
<BusinessObject> result = new List<BusinessObject>();
bubuko.com,布布扣            XmlDocument XmlDoc
= new XmlDocument();
bubuko.com,布布扣            XmlDoc.LoadXml(XmlStr);
bubuko.com,布布扣           
foreach (XmlNode ItemNode in XmlDoc.GetElementsByTagName("Root").Item(0).ChildNodes)
bubuko.com,布布扣           
{
bubuko.com,布布扣                BusinessObject item
= Activator.CreateInstance<BusinessObject>();
bubuko.com,布布扣                PropertyInfo[] properties
= typeof(BusinessObject).GetProperties();
bubuko.com,布布扣               
foreach (XmlNode propertyNode in ItemNode.ChildNodes)
bubuko.com,布布扣               
{
bubuko.com,布布扣                   
string name = propertyNode.Name;
bubuko.com,布布扣                   
string type = propertyNode.Attributes["Type"].Value;
bubuko.com,布布扣                   
string value = propertyNode.InnerXml;
bubuko.com,布布扣                   
foreach (PropertyInfo property in properties)
bubuko.com,布布扣                   
{
bubuko.com,布布扣                       
if (name == property.Name)
bubuko.com,布布扣                       
{
bubuko.com,布布扣                            property.SetValue(item,Convert.ChangeType(value,property.PropertyType),
null);
bubuko.com,布布扣                        }

bubuko.com,布布扣                    }

bubuko.com,布布扣                }

bubuko.com,布布扣                result.Add(item);
bubuko.com,布布扣            }

bubuko.com,布布扣           
return result;
bubuko.com,布布扣        }

然后我们调用这个方法:

bubuko.com,布布扣List<Entity> list = Deserialize<Entity>(str);

完了。

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

List 序列化,布布扣,bubuko.com

List 序列化

原文:http://www.cnblogs.com/dullbaby/p/3578675.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!