C#中对象,对象集合的简单Xml序列化与反序列化(已测试)

本文描述如何使用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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值