c# xml序列化和反序列化。也就是xml的解析和反解析。
用习惯了newTownSoft.json 的json反序列化。碰到xml是真的不习惯。
每次json反序列化都是直接把json丢到bejson网站生成一个实体类,稍微修改修改一点点变量名。然后直接newTownSoft反序列化,一下就得到一个实体类了。今天调某个接口,碰到xml。
记录如下。
xml
<response>
<functionID>setItemsPics</functionID>
<time>2017-09-07 15:51:04</time>
<ItemsIDList>
<itemIDInfo>
<operCode>0</operCode>
<operation>操作成功</operation>
</itemIDInfo>
<itemIDInfo>
<itemID>1125507057</itemID>
<operCode>0</operCode>
<operation>操作成功</operation>
</itemIDInfo>
</ItemsIDList>
</response>
实体类如下:先引用 using System.Xml.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace DDTopManager.Response
{
[XmlRoot("response")]
public class RSPItemPicSet
{ //操作返回xml示例,按这个xml格式定义可序列化的实体类
// public string str = @"<response>
// <functionID>setItemsPics</functionID>
// <time>2017-09-07 15:51:04</time>
// <ItemsIDList>
// <itemIDInfo>
// <itemID>1125550957</itemID>
// <operCode>0</operCode>
// <operation>操作成功</operation>
// </itemIDInfo>
// <itemIDInfo>
// <itemID>1125507057</itemID>
// <operCode>0</operCode>
// <operation>操作成功</operation>
// </itemIDInfo>
// </ItemsIDList>
//</response>";
[XmlElement("functionID")]
public string functionID { get; set; }
[XmlElement("time")]
public string time { get; set; } [XmlArray("ItemsIDList"), XmlArrayItem("itemIDInfo")]
public List<itemIDInfo> ItemsIDList { get; set; }
[XmlRoot("itemIDInfo")]
public class itemIDInfo
{
[XmlElement("itemID")]
public string itemID { get; set; }
[XmlElement("operCode")]
public string operCode { get; set; }
[XmlElement("operation")]
public string operation { get; set; }
}
} }
引用(这是从str这个xml中反序列化到实体类)大致如下:
XmlSerializer se = new XmlSerializer(typeof(RSPOrdersListGet)); byte[] arry = Encoding.UTF8.GetBytes(str);
System.IO.Stream me = new System.IO.MemoryStream(arry);
RSPOrdersListGet rsp = (RSPOrdersListGet)se.Deserialize(me);
序列化如下:
RSPOrdersListGet RSPLG = new RSPOrdersListGet();
RSPLG.functionID = "setItemsPics"; List<itemIDInfo> itemidinfos = new List<itemIDInfo>();
itemIDInfo idi = new itemIDInfo();
idi.operation = "000";
idi.operCode = "0011";
idi.itemId = "aaa";
itemidinfos.Add(idi);
itemIDInfo idi1 = new itemIDInfo();
idi1.operation = "000";
idi1.operCode = "0011";
idi1.itemId = "bbb";
itemidinfos.Add(idi1);
RSPLG.ItemsIDList = itemidinfos;
XmlSerializer rSPOrdersListGet = new XmlSerializer(typeof(RSPOrdersListGet));
rSPOrdersListGet.Serialize(Console.Out, RSPLG);
序列化的时候改命名空间编码等
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.NewLineChars = "\r\n";
settings.Encoding = Encoding.GetEncoding("gbk");
using (XmlWriter xmlWriter = XmlWriter.Create(sm, settings))
{
// 强制指定命名空间,覆盖默认的命名空间
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
rSPOrdersListGet.Serialize(xmlWriter, RSTGS, namespaces);
xmlWriter.Close();
};
记录,以免忘记。
有一点和newTownSoft.json序列化和反序列化不同的是,比如数字List<Entity> MyData 这个MyData 和json要对的上,
这里的直接用 头部的约束来定义即可
c# xml序列化和反序列化。也就是xml的解析和反解析。的更多相关文章
- XML 序列化与反序列化
XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
- .NET XML序列化与反序列化
闲着没事,写了两个通用的XML序列化与反序列化的方法. 贴出来当作笔记吧! /// <summary> /// XML序列化 /// </summary> /// <ty ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...
- c# XML序列化与反序列化
c# XML序列化与反序列化 原先一直用BinaryFormatter来序列化挺好,可是最近发现在WinCE下是没有办法进行BinaryFormatter操作,很不爽,只能改成了BinaryWrite ...
- Xml序列化、反序列化帮助类
之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 /// <summary> / ...
- Windows phone 之XML序列化与反序列化
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
- C#实现接口xml序列化与反序列化
C#实现接口xml序列化与反序列化 C#中接口无法被xml序列化,提示不支持.百度和bing也搜不到,只好自己动手写了 原理上肯定支持,.Net自己的xml序列化有一个IXmlSerializab ...
随机推荐
- Java SimpleDateFormat用法
? Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现,以下是Si ...
- ios7 - Custom UItabbar has a gap in the bottom
3down votefavorite Im trying to create a custom UITabbar using images for the selected and unselec ...
- c# Quartz.net的简单封装
分享一个以前封装的Quartz.net类. 新建一个QuartzClass类库项目.nuget控制台输入 image.png 添加Quartz.net的引用. 我们新建一个JobBase.cs文件,里 ...
- adb和adbd详尽分析
https://blog.csdn.net/viewsky11/article/details/53889143
- Hadoop完全分布式搭建全过程
本次操作共4台虚拟机(node211,node212,node213,node214),node211为NameNode,其余3台为DataNode,SecondaryNamenode为node212 ...
- 接口测试:添加cookie以及身份验证
添加cookie以及身份验证的接口文档: cookie:存放在本地的一个键值对 session:存放在服务端的一个键值对 学生金币充值接口文档: 一.使用postman进行测试 由于进行学生金币充值操 ...
- 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)
题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...
- [AIR] 对存储器(Storage Volume)监听
AIR 2.0及以上提供了对系统的存储器信息访问和监听的API.通过这些API,你不仅可以访问到硬盘文件系统,同时还可以监听通过USB或火线进行连接的移动存储设备,例如移动硬盘和以存储方式连接到计算机 ...
- centos下部署NFS
一. NFS简介 NFS---Network File System:主要功能是通过网络让不同的linux主机系统间可以彼此共享文件和目录.NFS客户端可以通过挂载的方式将NFS服务器端共 ...
- iOS 发送位置消息
发送地理位置在社交应用里面是很常用的需求.最近也需要在自己的应用里面加入这个功能 首先我们需要获取自己的地理位置,这里用到 CLLocationManager 这个类,调用如下代码 locationM ...