WebService 序列化和反序列化
参考了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 序列化和反序列化的更多相关文章
- Webservice SOAP传输序列化总结 以及webservice之序列化以及反序列化实例
一.所有Webservice中传递的对象都必须能够序列化,这个是作为在网络之间传输的必要条件.XML WebService和SOAP标准支持的数据类型如下: 1.基本数据类型. 标准类型,如:int ...
- Windowsphone 之xml序列化和反序列化的应用(WebService解析返回的数据DataSet )
关于Xml的序列化和反序列化: 可以看这篇文章,http://www.cnblogs.com/Windows-phone/p/3243575.html WebService解析返回的数据DataSet ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
- JSON序列化和反序列化的实例
之前有项目中使用到了Json的序列化和反序列化,现在将使用的实例记录下来以备查阅.如有不妥,请指教. 代码的最终目的是得到一个符合 resultClass<List<rtnGetFindM ...
- .NET的JSNO 序列化跟反序列化
由于本人最近在写webservice,之前一直都同通过AJAX,在服务端处理业务,但是最近需要写一些接口给其他人用,需要使用jsno的序列化与反序列化,什么是jsno就不多说,jsno的好处也不多说, ...
- 给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化
给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化 标签: ajaxdictionaryjsonobject服务器function 2012-07-25 18:41 2242人阅读 ...
- 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤
项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
随机推荐
- C程序设计语言 -- 运算符优先级
1. 运算符分类 算术运算符 [+, -,*, /, % , ++, --] 关系运算符 [>, >=, <, <=] 相等性运 ...
- js控制台输出图案
控制台输出图案 console.log([ " _ooOoo_", " o8888888o", " 88\" . \"88&quo ...
- vmware 开机自动启动
vmware开机自动启动, 可以使用vmrun命令. 1. 首先在“我的电脑”-“属性”-“高级”-“环境变量”-“PATH”中添加vmware路径,如:C:\Program Files (x86)\ ...
- JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)
3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- 对数据仓库Hive的一些认识
首先我们得明白什么是数据仓库? 数据仓库,英文名称为Data warehouse,可简写为DW或DWH.数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Supp ...
- HTML插入文件链接(如音乐,照片)
html中插入音频.H5的标签 src为本地 <audio controls="> <source src="韩庚 - I Don't Give A 屑.mp3& ...
- python之随机数random模块
random模块:用于生成随机数 import random #random模块:用于生成随机数 li = [] for i in range(7): r = random.randrange(0,3 ...
- Docker danriti/nginx-gunicorn-flask 使用
现成的镜像,已经配置好nginx-gunicorn-flask,可直接部署flask 项目 直接部署flask项目 安装镜像 如果默认源比较慢,可以换成163镜像源 http://hub-mirror ...
- IOS开发学习笔记005-数组
数组 数组故名思议就是一组数据的集合. int a[10];//可以存储10个整数 char c[8];//可以存储8个字符‘ 一般格式:数组类型 数组名[元素个数]: 数组元素的访问:下标,a[2 ...
- Python基础-week06 面向对象编程进阶
一.反射 1.定义:指的是通过字符串来操作类或者对象的属性 2.为什么用反射? 减少冗余代码,提升代码质量. 3.如何用反射? class People: country='China' def __ ...