需求:

  由于在.net core中去除了Xml序列化XmlSerializer操作类。因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题。因此封装了一个xml序列化与反序列化操作的类库。

功能:

1.将一个普通对象序列化为一个xml,并将其对应的xml格式反序列化为该对象;

2.将一个数组集合对象序列化为一个xml,并将其对应的xml格式反序列化为该对象;

3.将一个泛型集合对象序列化为一个xml,并将其对应的xml格式反序列化为该对象;

代码片段:

主要类为:XmlSerializer<T>,其中主要方法:

1.将对象序列化为xml的方法:ToXml(T packet)

 /// <summary>
/// 序列化报文为xml
/// </summary>
/// <param name="packet"></param>
/// <returns></returns>
public string ToXml(T packet)
{
StringBuilder sb = new StringBuilder();
if (!string.IsNullOrEmpty(_xmlHead))
{
sb.AppendFormat("{0}\r\n", _xmlHead);
}
try
{
Visit(sb, packet);
}
catch (Exception ex)
{
throw new XmlSerializerException($"序列化对象异常:{ex.Message}", ex);
}
return sb.ToString();
}

2.将xml内容反序列为对象T的操作:FromXml(string xml)

 /// <summary>
/// 序列化为报文内容
/// </summary>
/// <param name="xml">以<packet>标签开始的xml内容</param>
/// <returns></returns>
public T FromXml(string xml)
{
int index;
if (xml.Trim().StartsWith("<?xml") && (index = xml.IndexOf("?>")) != -)
{
xml = xml.Substring(index + ).Trim('\r', '\n', ' ');
}
try
{
switch (_elemType)
{
case ElementType.Generic:
return VisitXmlGeneric(xml);
case ElementType.Array:
return VisitXmlArray(xml);
default:
return VisitXmlObject(xml);
}
}
catch (Exception ex)
{
throw new XmlSerializerException($"反序列化对象信息异常:{ex.Message}", ex);
}
}

使用示例:

 // CreatedBy: Jackie Lee(天宇遊龍)
// CreatedOn: 2017-04-13
// 博客:http://www.cnblogs.com/dralee
/// <summary>
/// 测试类
/// </summary>
public class PersonTest
{
public void Test()
{
Person p1 = new Person
{
Id = ,
Name = "Jackie",
Gender = Gender.Male,
Phone = "",
Address = new Address { Province = "广东", City = "深圳", Detail = "xx区xx街道xxxx号" }
};
Person p2 = new Person
{
Id = ,
Name = "Hony",
Gender = Gender.Female,
Phone = "",
Address = new Address { Province = "广东", City = "深圳", Detail = "yy区yy街道yyyy号" }
}; XmlSerializer<Person> xs = new XmlSerializer<Person>("<?xml version=\"1.0\" encoding=\"utf - 8\"?>");
var xml1 = xs.ToXml(p1);
OutPrint("对象序列化", xml1);
var xml2 = xs.ToXml(p2);
OutPrint("xml反序列化", xml2); Console.WriteLine("\r\n============= 数组对象 ==============="); var pArr = new Person[] { p1, p2 };
XmlSerializer<Person[]> xsArr = new XmlSerializer<Person[]>("");
var xml4 = xsArr.ToXml(pArr);
OutPrint("数组对象序列化", xml4); var pArr2 = xsArr.FromXml(xml4);
Console.WriteLine("============= 数组对象反序列化 ===============");
pArr2.ToList().ForEach(p =>
{
OutPrint("数组对象", p.ToString());
}); Console.WriteLine("\r\n============= 泛型集合对象 ===============");
var ps = new List<Person> { p1, p2 };
XmlSerializer<List<Person>> xsList = new XmlSerializer<List<Person>>("");
var xml3 = xsList.ToXml(ps);
OutPrint("泛型集合对象序列化", xml3); var ps2 = xsList.FromXml(xml3);
Console.WriteLine("============= 泛型集合对象反序列化 ===============");
ps2.ForEach(p =>
{
OutPrint("泛型集合对象", p.ToString());
});
} private void OutPrint(string tip, string msg)
{
Console.WriteLine("======>{0}:", tip);
Console.WriteLine(msg);
}
}

运行效果:

类库文件: FD.Generic.Xml.zip

项目源代码已上传github,点击查看源码:https://github.com/dralee/FDGenericXml

SamYau2014反映,已添加对CDATA值的支持,源码见github

新版本效果:

基于.net core封装的xml序列化,反序列化操作的更多相关文章

  1. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...

  2. C# XML序列化/反序列化参考

    .NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...

  3. C# Json库 和 xml 序列化反序列化 存在的问题

    json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法:       声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...

  4. C# 复杂格式多级深度XML序列化反序列化

     default.xml 文件如下: <config><partnerships>  <partnership name="Main_Listener" ...

  5. XML序列化反序列化—常用类

    public class XMLSerializer    {        #region (public) xml序列化        /// <summary>        /// ...

  6. C# XML序列化/反序列化类XmlSerializer使用示例

    using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...

  7. XML序列化反序列化

    using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; nam ...

  8. XML序列化/反序列化数据库形式保存和读取。

    直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...

  9. C# WPF xml序列化 反序列化

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

随机推荐

  1. 51Nod - 1295:XOR key (可持久化Trie求区间最大异或)

    给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求ALL 至 ARR 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值 ...

  2. g2o待总结

    http://blog.csdn.net/u010566411/article/details/53862601

  3. Python使用Timer实现验证码功能

    from threading import Timer import random class Code: def __init__(self): self.make_cache() def make ...

  4. 20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1

    20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1 视频地址: https://www.bilibili.com/video/av39709290/?p=10 博客地址: https ...

  5. PHP实用小程序(三)

    <HTML> <HEAD> <TITLE>给数组增加元素</TITLE> </HEAD> <? $Cities[] = "& ...

  6. CodeForces Gym 100685I Innovative Business (贪心)

    题意:给定一条路的长和宽,然后给你瓷砖的长和宽,你只能横着或者竖着铺,也可以切成片,但是每条边只能对应一条边,问你最少要多少瓷砖. 析:先整块整块的放,然后再考虑剩下部分,剩下的再分成3部分,先横着, ...

  7. swift日期操作

    简介:本文将介绍一些关于swift中对于日期的格式化与获取,支持swift4.0 extension Date { //格式化日期 func getDateString() -> String{ ...

  8. CSS3 制作魔方 - 玩转魔方

    在上一篇<CSS3 制作魔方 - 形成魔方>中介绍了一个完整魔方的绘制实现,本文将介绍魔方的玩转,支持上下左右每一层独立地旋转.先来一睹玩转的风采. 1.一个问题 由于魔方格的位置与转动的 ...

  9. CSS小技巧收藏

    居中对齐 很多时候我们需要把一个元素在其父级容器里水平.垂直居中对齐.以下我列出了常用的几种方法: 1.在知道子元素宽度与高度的情况下进行居中,采用位置定位:absolute + margin .pa ...

  10. Tarjan找桥和割点与点连通分量与边连通分量【未成形】

    之前只学了个强连通Tarjan算法,然后又摸了缩点操作: 然后今天在lightoj摸了一道模板题,是求所有桥的题: 然后发现,要把:割点,割点集合,双连通,最小割边集合(桥),点连通分量,边连通分量都 ...