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内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
随机推荐
- [未完] term.js 记录遇到的问题
参考博文:https://www.cnblogs.com/zhenfei-jiang/p/7065038.html 按照网上查找的资料敲了代码 term.on('data', function(dat ...
- JavaScriptDate(日期)
如何使用Date()方法获取当日的日期. getFullYear(): 使用getFullYear()获取年份. getTime(): getTime()返回1970年1月1日至今的毫秒数. setF ...
- MongDB之各种新增操作
接口IMongDaoCreate: package com.net.test.mongdb.dao; import java.util.List; import com.net.test.mongdb ...
- ubuntu版本查看
cat /proc/version uname -a lsb_release -a
- HDU1301 Jungle Roads
Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...
- kafka 的offset的重置
最近在spark读取kafka消息时,每次读取都会从kafka最新的offset读取.但是如果数据丢失,如果在使用Kafka来分发消息,在数据处理的过程中可能会出现处理程序出异常或者是其它的错误,会造 ...
- Android Studio 快捷键(包含自定义)终极版
[F] [F] F2 在错误代码之间切换 F3 往前定位(Shift + F3:往后定位 )有问题 F4\Ctrl+鼠标点击\Ctrl+B 转到定义,查看类继承关系 F5 但不调试进入函数内部. ...
- C语言用一维数组打印杨辉三角(原:无意中想到)
本贴地址 ] = { }; a[] = , a[] = ; int i, j,m; ; i <= ; i++) //2-11 输出10行 { ; j > ; j--) //关键在这句,倒着 ...
- 驱动模块 .ko
模块: 模块机制,作用搞高LINUX操作系统的扩充性. 1. 模块概念: 1.动态可加载内核模块LKM 2.内核空间运行 3.是不是一执行文件,是一个没有经过链接,不能独立运行的一个目标文件(.c-& ...
- SQLAlchemy Script
SQLAlchemy: 1.由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 from sqlalchemy_utils impo ...