参考了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. 微信小程序的开发——01小程序的执行流程是怎样的?

    作者:叶小钗 转载至:https://www.cnblogs.com/yexiaochai/p/9346043.html 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是 ...

  2. Binary Agents-freecodecamp算法题目

    Binary Agents 1.要求 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. 2.思路 用.split(' ')将输入二进制字符串转化为各个二进制数字符串组成的数组 用 ...

  3. 多页应用 Webpack4 配置优化与踩坑记录

    前言 最近新起了一个多页项目,之前都未使用 webpack4 ,于是准备上手实践一下.这篇文章主要就是一些配置介绍,对于正准备使用 webpack4 的同学,可以做一些参考. webpack4 相比之 ...

  4. Linux 服务器用户权限管理改造方案与实施项目

    Linux 服务器用户权限管理改造方案与实施项目 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状. 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论. ...

  5. OpenFaceswap 入门教程(2):软件使用篇!

    安装完OpenFaceswap之后,是不是就迫不及待的想要“见证奇迹”了呢? 都说磨刀不误砍柴工.开始之前请先做一个准备.然后大致了解一下换脸的过程 换脸基本步骤是: 把视频切成很多图片 把图片中的人 ...

  6. 笔记-python-standard library-12.1 pickle

    笔记-python-standard library-12.1 pickle 1.      pickle简介 source code: Lib/pickle.py pickle模块实质上是一个实现p ...

  7. day10 消息队列,多进程和多线程以及协程,异步IO,事件驱动等

    回顾一下线程和进程 线程与进程的区别 守护线程: 队列: 两种方式: 先进先出  # 后入先出   #卖水果,后来的来的是新的 生产者消费者模型: 生产包子, 吃包子 事件 event: 红绿灯模型 ...

  8. Python-S9-Day99——Web前端框架之Vue.js

    01课程安排 02let和const: 03 箭头函数 04 对象的单体模式 05 Node.js介绍和npm操作 06 Webpack,babel介绍和Vue的第一个案例 01课程安排 1.1 ht ...

  9. HTML textarea 无法修改 value 的问题

    当设置了  textarea  的 value 后,发现页面的输入框无法输入值, <textarea id="></textarea> 解决方法: 只需将值设置在  ...

  10. Leetcode 639.解码方法2

    解码方法2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以包含字符 ' ...