思想决定人生,态度改变一切

成功者找方法,失败者找借口! 做事先做人;安分做人,本分做事!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
本文描述如何使用CLR中的StringWriter,XmlSerializer将对象, 对象集合序列化为Xml格式的字符串, 同时描述如何进行反序列化. 

C#版本: C# 
3.0 
开发环境: VS 
2008 

主要方法: 
复制  保存using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication2
{
    
public class SimpleSerializer
    
{
        
/// <summary>
        
/// 序列化对象
        
/// </summary>
        
/// <typeparam name="T">对象类型</typeparam>
        
/// <param name="t">对象</param>
        
/// <returns></returns>

        public static string Serialize<T>(T t)
        
{
            
using (StringWriter sw = new StringWriter())
            
{
                XmlSerializer xz 
= new XmlSerializer(t.GetType());
                xz.Serialize(sw, t);
                
return sw.ToString();
            }

        }


        
/// <summary>
        
/// 反序列化为对象
        
/// </summary>
        
/// <param name="type">对象类型</param>
        
/// <param name="s">对象序列化后的Xml字符串</param>
        
/// <returns></returns>

        public static object Deserialize(Type type, string s)
        
{
            
using (StringReader sr = new StringReader(s))
            
{
                XmlSerializer xz 
= new XmlSerializer(type);
                
return xz.Deserialize(sr);
            }

        }

    }

}

定义一个用于测试的实体类: UserInfo 
复制  保存using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace ConsoleApplication2
{
    [Serializable]
    
public class UserInfo
    
{
        
private int m_UserId;

        [XmlElement(
"userId")]
        
public int UserId
        
{
            
get return m_UserId; }
            
set { m_UserId = value; }
        }

        
private string m_UserName;

        [XmlElement(
"userName")]
        
public string UserName
        
{
            
get return m_UserName; }
            
set { m_UserName = value; }
        }

    }

}

编写测试子程序: 
复制  保存using System;
using System.Collections.Generic;

namespace ConsoleApplication2
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            Program.TestOne();
            Console.WriteLine(
string.Empty);

            Program.TestTwo();
            Console.WriteLine(
string.Empty);

            Program.TestThree();
            Console.WriteLine(
string.Empty);

            Program.TestFour();
        }

        
public static void TestOne()
        
{
            UserInfo info 
= new UserInfo() { UserId = 1, UserName = "Guozhijian" };
            Console.WriteLine(SimpleSerializer.Serialize
<UserInfo>(info));
        }

        
public static void TestTwo()
        
{
            List
<UserInfo> list = new List<UserInfo>();
            list.Add(
new UserInfo() { UserId = 1, UserName = "Guozhijian" });
            list.Add(
new UserInfo() { UserId = 2, UserName = "Zhenglanzhen" });
            Console.WriteLine(SimpleSerializer.Serialize
<List<UserInfo>>(list));
        }

        
public static void TestThree()
        
{
            
string s = SimpleSerializer.Serialize<UserInfo>(new UserInfo() { UserId = 1, UserName = "Guozhijian" });
            UserInfo info 
= SimpleSerializer.Deserialize(typeof(UserInfo), s) as UserInfo;
            Console.WriteLine(info.UserId.ToString() 
+ "" + info.UserName);
        }

        
public static void TestFour()
        
{
            List
<UserInfo> list = new List<UserInfo>();
            list.Add(
new UserInfo() { UserId = 1, UserName = "Guozhijian" });
            list.Add(
new UserInfo() { UserId = 2, UserName = "Zhenglanzhen" });
            
string s = SimpleSerializer.Serialize<List<UserInfo>>(list);
            List
<UserInfo> newList = SimpleSerializer.Deserialize(typeof(List<UserInfo>), s) as List<UserInfo>;
            
foreach (var info in newList)
            
{
                Console.WriteLine(info.UserId.ToString() 
+ "" + info.UserName);
            }

        }

    }

}

输出结果为: 
C:\WINDOWS\system32\cmd.exe 复制  保存  
<?xml version="1.0" encoding="utf-16"?> 
<UserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http: 
//www.w3.org/2001/XMLSchema"> 
  <userId>1</userId> 
  
<userName>Guozhijian</userName> 
</UserInfo> 

<?xml version="1.0" encoding="utf-16"?> 
<ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd 
="http://www.w3.org/2001/XMLSchema"> 
  
<UserInfo> 
    
<userId>1</userId> 
    
<userName>Guozhijian</userName> 
  
</UserInfo> 
  
<UserInfo> 
    
<userId>2</userId> 
    
<userName>Zhenglanzhen</userName> 
  
</UserInfo> 
</ArrayOfUserInfo> 

1, Guozhijian 

1, Guozhijian 
2, Zhenglanzhen
posted on 2008-01-16 23:14  投石问路  阅读(5752)  评论(5编辑  收藏  举报