using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//序列化
Person person = new Person() { Name = "dnawo", Age = };
string xml = Serialize(person);
Console.WriteLine(xml); //反序列化
person = Deserialize<Person>(xml);
Console.WriteLine(person.Name); Console.ReadKey();
} /// <summary>
/// 序列化
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string Serialize(object o)
{
return Serialize(o, new UTF8Encoding(false));
} /// <summary>
/// 序列化
/// </summary>
/// <param name="o"></param>
/// <param name="encode"></param>
/// <returns></returns>
public static string Serialize(object o, Encoding encode)
{
string result = string.Empty;
//方法1:
using (MemoryStream output = new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
serializer.Serialize(output, o);
result = encode.GetString(output.ToArray());
}
//方法2:
//using (MemoryStream output = new MemoryStream())
//{
// using (XmlTextWriter writer = new XmlTextWriter(output, encode))
// {
// XmlSerializer serializer = new XmlSerializer(o.GetType());
// serializer.Serialize(writer, o);
// }
// result = encode.GetString(output.ToArray());
//}
//方法3:可删除xml声明和默认命名空间(xmlns:xsi,xmlns:xsd)
//XmlWriterSettings setting = new XmlWriterSettings();
//setting.Encoding = encode;
//setting.OmitXmlDeclaration = true;
//XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
//namespaces.Add("", "");
//using (MemoryStream output = new MemoryStream())
//{
// using (XmlWriter writer = XmlWriter.Create(output, setting))
// {
// XmlSerializer serializer = new XmlSerializer(o.GetType());
// serializer.Serialize(writer, o, namespaces);
// result = encode.GetString(output.ToArray());
// }
//}
return result;
} /// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="str"></param>
/// <returns></returns>
public static T Deserialize<T>(string str) where T : class
{
return Deserialize<T>(str, new UTF8Encoding(false));
} /// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="str"></param>
/// <param name="encode"></param>
/// <returns></returns>
public static T Deserialize<T>(string str, Encoding encode) where T : class
{
T result = null;
//方法1:
using (MemoryStream input = new MemoryStream(encode.GetBytes(str)))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
result = serializer.Deserialize(input) as T;
}
//方法2:
//using (MemoryStream input = new MemoryStream(encode.GetBytes(str)))
//{
// using (XmlTextReader reader = new XmlTextReader(input))
// {
// XmlSerializer serializer = new XmlSerializer(typeof(T));
// result = serializer.Deserialize(reader) as T;
// }
//}
//方法3:
//using (MemoryStream input = new MemoryStream(encode.GetBytes(str)))
//{
// using (XmlReader reader = XmlReader.Create(input))
// {
// XmlSerializer serializer = new XmlSerializer(typeof(T));
// result = serializer.Deserialize(reader) as T;
// }
//}
return result;
}
}
   /// <summary>
/// 测试类
/// </summary>
[XmlRoot("per")]
public class Person
{
[XmlElement("na")]
public string Name { get; set; }
[XmlElement("ag")]
public int Age { get; set; }
}

运行结果:

<?xml version="1.0" encoding="utf-8"?><per xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><na>dnawo</na><ag></ag></per>

http://www.mzwu.com/article.asp?id=3523

最新文章

  1. Mac合并分区
  2. 站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展
  3. YAML 语法
  4. hibernate中数据库方言
  5. hadoop2.6分布式部署时 livenodes等于1的原因
  6. [转]Class &#39;Think\Log&#39; not found
  7. c++ 递归斐波那契算法及时间复杂度
  8. 【翻译】CEDEC2014跨世代多平台并行开发PS4版如龙维新开发的一年
  9. PHP运行模式的深入理解
  10. 安卓Fragment和Activity之间的数据通讯
  11. Zend server最大化应用程序的性能、扩展性和可用性
  12. 牛客网《BAT面试算法精品课》学习笔记
  13. 课堂小记---JavaScript(3)
  14. 生产环境nginx配置文件(带https安全认证)
  15. 字符和字符串在Java中的旅程
  16. iOS 快速排序
  17. TCCSuperPlayerView让Delphi支持app视频播放!
  18. 关于找List的中间Node
  19. POJ 3469 Dual Core CPU Dual Core CPU
  20. Laravel 多态关联使用的案例

热门文章

  1. AD 学习
  2. JavaScript高级程序设计学习笔记第十三章--事件
  3. Eclipse中一个开发AspectJ的插件安…
  4. boost编译配置及简单使用
  5. C++ 无边框的拖动窗口代码
  6. “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)
  7. Gym - 101889E Enigma(数位填数+记忆化)
  8. 基于selenium+java的12306自动抢票
  9. Git 分支管理 Feature分支 强行删除分支
  10. 机器学习中的L1、L2正则化