参考了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. Hotkeys.js 2.0.2 发布,JS 网页快捷键设置,捕获键盘输入和输入的组合键快捷键,它没有依赖

    这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...

  2. webpack 4.x 解决 webpack-dev-server工具在webpack构建的项目中使用问题

    webpack-dev-server工具能实现自动打包编译和热更新 首先将webpack-dev-server安装到项目中 npm install webpack-dev-server -D 这时在命 ...

  3. [Wolfgang Mauerer] 深入linux 内核架构 第十三章 系统调用

    作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分 ...

  4. HashMap 排序

    本文章,摘抄自:2018黑马程序最新面试题汇总 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性.请写一个方法实现 ...

  5. thinkphp 5数据库操作

    1.原生sql $options=Db::table('__MALL_POST__') ->alias('m') ->join('__MALL_CATEGORY_VALUE__ v','m ...

  6. 02.VUE学习二之数据绑定

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. Thinkphp 支付宝插件的引入 和调用

    本文版权归本宝宝所有 未得允许不得转载 下载地址传送门 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.twLYka&am ...

  8. python3 练习题100例 (七)

    题目七:将一个列表的数据复制到另一个列表中. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目七:将一个列表的数 ...

  9. centos7.3网络配置

    一.关闭NetworkManager 默认状态下最小化安装使用NetworkManager这个服务来控制联网的,但是这个配置在配置生产环境服务器时一般不会使用,而是使用系统自带的network服务,更 ...

  10. [BZOJ1187]神奇游乐园(插头DP)

    Description 题意给定一个矩阵,每个格子有权值,在[-1000.1000]内,求一条回路使得回路经过权值和最大,每个格子最多经过一次 2≤n≤100,2≤m≤6 Code #include ...