参考了Fish LI的Xml读取文章,写了XML序列化和反序列化的文章。

序列化:把实体列转化成XML。反序列化:把XML按一定的规则转化成需要的实体列。

序列化和反序列化化使用到的类,

using System.Xml.Serialization;
using System.IO;
using System.Xml;

XML一些属性:

XMLAttribtue:属性

XMLText:xml值

XmlElement:xml标签值

XML调试,反序列化失败。常见的原因是XML的定义和Class类不一致,导致失败。我的做法是把class序列化,比较序列化的值和需要反序列化的XML有什么不同。

代码使用的类,Class C

 public class C
{
public string Company
{
get;
set;
} [XmlElement("B2")]
public List<B> b
{
get;
set;
}
} public class B
{
[XmlAttribute("sex")]
public string B_Attribute
{
get;
set;
} [XmlAttribute("age")]
public string B_Attribute_Age
{
get;
set;
} [XmlText] public string B_Name
{
get;
set;
}
}

1. 序列化代码使用到的方法类,MemoryStream 初始化流,XmlWriter 创建Stream流可读写,serializer.Serialize序列化操作。StreamReader 读取序列化的流信息。

代码,

   public static string XmlSerialize(object o, Encoding encoding)
{
XmlSerializer serializer = new XmlSerializer(o.GetType()); // StreamWriter 方法
//using (MemoryStream stream = new MemoryStream())
//{
// using (StreamWriter writer = new StreamWriter(stream, encoding))
// {
// serializer.Serialize(writer, o);
// stream.Position = 0;
// using (StreamReader reader = new StreamReader(stream, encoding))
// {
// return reader.ReadToEnd();
// }
// }
//} // XmlWriting方法
using (MemoryStream stream = new MemoryStream())
{
using (XmlWriter writer = XmlWriter.Create(stream))
{
serializer.Serialize(writer, o);
} stream.Position = ; using (StreamReader reader = new StreamReader(stream, encoding))
{
return reader.ReadToEnd();
}
}
}

2.反序列化化使用到的方法类,MemoryStream 流的形式初始化XML到内存中,StreamReader读取XML二进制信息,mySerializer.Deserialize反序列化为Class C

        public static T XmlDeserialize<T>(string s, Encoding encoding)
{
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
{
using (StreamReader sr = new StreamReader(ms, encoding))
{
return (T)mySerializer.Deserialize(sr);
}
}
}

所有的代码如下,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
using System.Xml; namespace WebService
{
class Program
{
static void Main(string[] args)
{
//C c = new C();
//List<B> listB = new List<B>(); //B b = new B();
//b.A = "男";
//listB.Add(b); //b = new B();
//b.A = "女";
//listB.Add(b); //b = new B();
//b.A = "男";
//listB.Add(b); //c.b = listB;
//string str = XmlSerialize(c, Encoding.UTF8);
//Console.WriteLine(str); //C cClass = XmlDeserialize<C>(@"<C><B2><A sex=""男"" /><AA>陈建</AA></B2></C>", Encoding.UTF8); // 最主要的是类和xml信息能对应,反序列化失败的查找方法,先序列化出来一个XML,对比XML值。
C cClass = XmlDeserialize<C>(@"<C><Company>ctrip</Company><B2 sex=""男"" age=""31"" >chinaagan</B2></C>", Encoding.UTF8);
B b1 = cClass.b[];
Console.WriteLine(cClass.Company);
Console.WriteLine("sex:" + b1.B_Attribute);
Console.WriteLine("age:" + b1.B_Attribute_Age);
Console.WriteLine(b1.B_Name);
Console.Read();
} public static string XmlSerialize(object o, Encoding encoding)
{
XmlSerializer serializer = new XmlSerializer(o.GetType()); // StreamWriter 方法
//using (MemoryStream stream = new MemoryStream())
//{
// using (StreamWriter writer = new StreamWriter(stream, encoding))
// {
// serializer.Serialize(writer, o);
// stream.Position = 0;
// using (StreamReader reader = new StreamReader(stream, encoding))
// {
// return reader.ReadToEnd();
// }
// }
//} // XmlWriting方法
using (MemoryStream stream = new MemoryStream())
{
using (XmlWriter writer = XmlWriter.Create(stream))
{
serializer.Serialize(writer, o);
} stream.Position = ; using (StreamReader reader = new StreamReader(stream, encoding))
{
return reader.ReadToEnd();
}
}
} public static T XmlDeserialize<T>(string s, Encoding encoding)
{
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
{
using (StreamReader sr = new StreamReader(ms, encoding))
{
return (T)mySerializer.Deserialize(sr);
}
}
}
} public class C
{
public string Company
{
get;
set;
} [XmlElement("B2")]
public List<B> b
{
get;
set;
}
} public class B
{
[XmlAttribute("sex")]
public string B_Attribute
{
get;
set;
} [XmlAttribute("age")]
public string B_Attribute_Age
{
get;
set;
} [XmlText] public string B_Name
{
get;
set;
}
}
}

跟上节拍,每日累积一点技术。

WebService 序列化和反序列化的更多相关文章

  1. Webservice SOAP传输序列化总结 以及webservice之序列化以及反序列化实例

    一.所有Webservice中传递的对象都必须能够序列化,这个是作为在网络之间传输的必要条件.XML WebService和SOAP标准支持的数据类型如下: 1.基本数据类型. 标准类型,如:int ...

  2. Windowsphone 之xml序列化和反序列化的应用(WebService解析返回的数据DataSet )

    关于Xml的序列化和反序列化: 可以看这篇文章,http://www.cnblogs.com/Windows-phone/p/3243575.html WebService解析返回的数据DataSet ...

  3. C#的XML序列化及反序列化

    webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...

  4. JSON序列化和反序列化的实例

    之前有项目中使用到了Json的序列化和反序列化,现在将使用的实例记录下来以备查阅.如有不妥,请指教. 代码的最终目的是得到一个符合 resultClass<List<rtnGetFindM ...

  5. .NET的JSNO 序列化跟反序列化

    由于本人最近在写webservice,之前一直都同通过AJAX,在服务端处理业务,但是最近需要写一些接口给其他人用,需要使用jsno的序列化与反序列化,什么是jsno就不多说,jsno的好处也不多说, ...

  6. 给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化

    给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化 标签: ajaxdictionaryjsonobject服务器function 2012-07-25 18:41 2242人阅读  ...

  7. 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

    项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...

  8. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  9. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

随机推荐

  1. 【NTT】bzoj3992: [SDOI2015]序列统计

    板子题都差点不会了 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数 列,数列中的每个数都属于集合S.小C用这个生成器生 ...

  2. 自动化运维工具——ansible系列命令

    ansible-galaxy 连接 https://galaxy.ansible.com 下载相应的roles,此网站是Ansible爱好者将日常使用较好的playbooks打包上传,其他人可以免费下 ...

  3. thinkphp 3.2.3 - Route.class.php 解析(路由匹配)

    class Route { public static function check(){ $depr = C('URL_PATHINFO_DEPR'); // '/' $regx = preg_re ...

  4. linux lvm扩容

    1.分区,  查看磁盘使用:fdisk -l 对磁盘分区:fdisk /dev/sdb 2.创建pv pvcreate /dev/sdb1 查看pv: pvdisplay 3.查看vg  vgdisp ...

  5. 基础_String

    String str1="hello"; String str2="hello"; String str3="hello"; String ...

  6. oracle 迭代查询

    Oracle 迭代查询, 以后台菜单作为示例 这是要准备的sql create table tbl_menu( id number primary key, parent_id , name ) no ...

  7. 巧用Windows Server 2008的NPS策略

    单位员工大部分是移动办公一族,由于病毒库更新不及时.系统补丁没有安装,使移动办公设备处于危险状态,访问内部网络时很可能威胁整个网络.该如何防守网络访问这扇门呢? 笔者所在的单位是一家传媒公司,有数百人 ...

  8. C#定时器,定时做什么事情

    http://www.cnblogs.com/bobositlife/archive/2015/09/29/aspnet-mvc-csharp-quartz-net-timer-task-schedu ...

  9. App 设计技巧

    http://www.360doc.com/content/14/1120/18/21412_426730809.shtml http://veryui.diandian.com/post/2013- ...

  10. [netty4][netty-transpot]Channel体系分析

    Channel体系分析 接口与类结构体系 -- [I]AttributeMap, ChannelOutboundInvoker, Comparable -- [I]AttributeMap ---- ...