需求:

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

功能:

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

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

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

代码片段:

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

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

  1. /// <summary>
  2. /// 序列化报文为xml
  3. /// </summary>
  4. /// <param name="packet"></param>
  5. /// <returns></returns>
  6. public string ToXml(T packet)
  7. {
  8. StringBuilder sb = new StringBuilder();
  9. if (!string.IsNullOrEmpty(_xmlHead))
  10. {
  11. sb.AppendFormat("{0}\r\n", _xmlHead);
  12. }
  13. try
  14. {
  15. Visit(sb, packet);
  16. }
  17. catch (Exception ex)
  18. {
  19. throw new XmlSerializerException($"序列化对象异常:{ex.Message}", ex);
  20. }
  21. return sb.ToString();
  22. }

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

  1. /// <summary>
  2. /// 序列化为报文内容
  3. /// </summary>
  4. /// <param name="xml">以<packet>标签开始的xml内容</param>
  5. /// <returns></returns>
  6. public T FromXml(string xml)
  7. {
  8. int index;
  9. if (xml.Trim().StartsWith("<?xml") && (index = xml.IndexOf("?>")) != -)
  10. {
  11. xml = xml.Substring(index + ).Trim('\r', '\n', ' ');
  12. }
  13. try
  14. {
  15. switch (_elemType)
  16. {
  17. case ElementType.Generic:
  18. return VisitXmlGeneric(xml);
  19. case ElementType.Array:
  20. return VisitXmlArray(xml);
  21. default:
  22. return VisitXmlObject(xml);
  23. }
  24. }
  25. catch (Exception ex)
  26. {
  27. throw new XmlSerializerException($"反序列化对象信息异常:{ex.Message}", ex);
  28. }
  29. }

使用示例:

  1. // CreatedBy: Jackie Lee(天宇遊龍)
  2. // CreatedOn: 2017-04-13
  3. // 博客:http://www.cnblogs.com/dralee
  4. /// <summary>
  5. /// 测试类
  6. /// </summary>
  7. public class PersonTest
  8. {
  9. public void Test()
  10. {
  11. Person p1 = new Person
  12. {
  13. Id = ,
  14. Name = "Jackie",
  15. Gender = Gender.Male,
  16. Phone = "",
  17. Address = new Address { Province = "广东", City = "深圳", Detail = "xx区xx街道xxxx号" }
  18. };
  19. Person p2 = new Person
  20. {
  21. Id = ,
  22. Name = "Hony",
  23. Gender = Gender.Female,
  24. Phone = "",
  25. Address = new Address { Province = "广东", City = "深圳", Detail = "yy区yy街道yyyy号" }
  26. };
  27.  
  28. XmlSerializer<Person> xs = new XmlSerializer<Person>("<?xml version=\"1.0\" encoding=\"utf - 8\"?>");
  29. var xml1 = xs.ToXml(p1);
  30. OutPrint("对象序列化", xml1);
  31. var xml2 = xs.ToXml(p2);
  32. OutPrint("xml反序列化", xml2);
  33.  
  34. Console.WriteLine("\r\n============= 数组对象 ===============");
  35.  
  36. var pArr = new Person[] { p1, p2 };
  37. XmlSerializer<Person[]> xsArr = new XmlSerializer<Person[]>("");
  38. var xml4 = xsArr.ToXml(pArr);
  39. OutPrint("数组对象序列化", xml4);
  40.  
  41. var pArr2 = xsArr.FromXml(xml4);
  42. Console.WriteLine("============= 数组对象反序列化 ===============");
  43. pArr2.ToList().ForEach(p =>
  44. {
  45. OutPrint("数组对象", p.ToString());
  46. });
  47.  
  48. Console.WriteLine("\r\n============= 泛型集合对象 ===============");
  49. var ps = new List<Person> { p1, p2 };
  50. XmlSerializer<List<Person>> xsList = new XmlSerializer<List<Person>>("");
  51. var xml3 = xsList.ToXml(ps);
  52. OutPrint("泛型集合对象序列化", xml3);
  53.  
  54. var ps2 = xsList.FromXml(xml3);
  55. Console.WriteLine("============= 泛型集合对象反序列化 ===============");
  56. ps2.ForEach(p =>
  57. {
  58. OutPrint("泛型集合对象", p.ToString());
  59. });
  60. }
  61.  
  62. private void OutPrint(string tip, string msg)
  63. {
  64. Console.WriteLine("======>{0}:", tip);
  65. Console.WriteLine(msg);
  66. }
  67. }

运行效果:

类库文件: 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. php排序方法之选择排序

    //选择排序法 $arr = array(3,55,45,2,67,76,6.7,-65,85,4); function selectSort($arr){ for ( $i=0; $i<cou ...

  2. js获取浏览器宽高、网页宽高、屏幕宽高、鼠标位置等(带图片说明)

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;(点击查看大图) 网页可见区域宽: document.bo ...

  3. CISCO-端口安全

    1.MAC地址与端口绑定,当发现主机的MAC地址与交换机上指定的MAC地址不同时 ,交换机相应的端口将down掉.当给端口指定MAC地址时,端口模式必须为access或者Trunk状况. 3550-1 ...

  4. YoutubeAPI使用

    YoutubeAPI使用 1  Youtube API能干什么 2  Youtube API 2.0 Youtube简介 2.1 如何使用Youtube API 2.1.1 获取Youtube 的开发 ...

  5. HDU1083(最大匹配)

    Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  6. vs缩进多行,vs2013测试可用

    vs缩进多行,vs2013测试可用 选中要缩进的行,然后点击tab会直接在选中行增大缩进 快捷键 功能 描述 tab 增大缩进 选中要缩进的行,可多行 shift + table 减小缩进 选中要缩进 ...

  7. POJ 1182 食物链 (破题)

    题意:中文题. 析:对POJ 真是无语,有的题用G++过不了,C++能过,有的题不写EOF(题目明明说就一组的数据的)不过,有的题写EOF也不过, 这个题就是写EOF就过不了... 这个题用的是加权并 ...

  8. UVa 10723 Cyborg Genes (LCS, DP)

    题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种. 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么 ...

  9. Linux下共享库嵌套依赖问题 (转载)

    转自:http://my.oschina.net/moooofly/blog/506466 问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 ...

  10. 1118 Birds in Forest (25 分)

    Some scientists took pictures of thousands of birds in a forest. Assume that all the birds appear in ...