C# 中对象序列化XML的方法

作者:王月半子 时间:2021-11-12 13:51:55 

今天我们来看一下在C#中对象序列化XML的方法。

不得不说,在这个Json横行的年代,XML虽然式微,但也的确是一股子清流。(个人感觉)

不多说,直接开始。

首先先说怎么用

需要用到的是这两个命名空间(主要)


using System.Xml;
using System.Xml.Serialization;

然后序列化和反序列化的方式和Json一样。(后面提供封装方法)


string result = XmlSerializeHelper.Serialize<test>(new test
     {
       name = "Seven",
       cardId = "663927",
       age = 15,
       currentTime = DateTime.Now
     });
     Console.WriteLine(result);
     test test2 = XmlSerializeHelper.DeSerialize<test>(result);

C# 中对象序列化XML的方法

下面来看封装类


public class XmlSerializeHelper
 {
   //对象转XML
   public static string ObjToXml(object obj)
   {
     using (MemoryStream Stream = new MemoryStream())
     {
       XmlSerializer xml = new XmlSerializer(obj.GetType());
       xml.Serialize(Stream, obj);
       Stream.Position = 0;
       StreamReader sr = new StreamReader(Stream);
       return sr.ReadToEnd();
     }

}

public static string Serialize<T>(T obj)
   {
     return Serialize<T>(obj, Encoding.UTF8);
   }
   /// <summary>
   /// 实体对象序列化成xml字符串
   /// </summary>
   /// <typeparam name="T"></typeparam>
   /// <param name="obj"></param>
   /// <returns></returns>
   public static string Serialize<T>(T obj, Encoding encoding)
   {
     try
     {
       if (obj == null)
       {
         throw new ArgumentNullException("obj");
       }
       var ser = new XmlSerializer(obj.GetType());
       using (var ms = new MemoryStream())
       {
         using (var writer = new XmlTextWriter(ms, encoding))
         {
           writer.Formatting = Formatting.Indented;
           ser.Serialize(writer, obj);
         }
         var xml = encoding.GetString(ms.ToArray());
         xml = xml.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
         xml = xml.Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", "");
         xml = Regex.Replace(xml, @"\s{2}", "");
         xml = Regex.Replace(xml, @"\s{1}/>", "/>");
         return xml;
       }
     }
     catch (Exception ex)
     {
       throw ex;
     }
   }
   /// <summary>
   /// 反序列化xml字符为对象,默认为Utf-8编码
   /// </summary>
   /// <typeparam name="T"></typeparam>
   /// <param name="xml"></param>
   /// <returns></returns>
   public static T DeSerialize<T>(string xml) where T : new()
   {
     return DeSerialize<T>(xml, Encoding.UTF8);
   }
   /// <summary>
   /// 反序列化xml字符为对象
   /// </summary>
   /// <typeparam name="T"></typeparam>
   /// <param name="xml"></param>
   /// <param name="encoding"></param>
   /// <returns></returns>
   public static T DeSerialize<T>(string xml, Encoding encoding) where T : new()
   {
     try
     {
       var mySerializer = new XmlSerializer(typeof(T));
       using (var ms = new MemoryStream(encoding.GetBytes(xml)))
       {
         using (var sr = new StreamReader(ms, encoding))
         {
           return (T)mySerializer.Deserialize(sr);
         }
       }
     }
     catch (Exception e)
     {
       return default(T);
     }
   }
 }

Class Of XmlSerializeHelper

好了,板砖要紧,先到这里。

来源:https://www.cnblogs.com/SevenWang/p/14306392.html

标签:c#,对象,序列化,XML
0
投稿

猜你喜欢

  • nacos使用占位符${}进行参数配置的方法

    2022-07-15 08:59:07
  • Android Spinner 组件的应用实例

    2022-07-12 04:50:13
  • 关于IDEA配置文件字符集的问题

    2022-11-01 13:06:44
  • mybatis-plus查询源码详解

    2023-02-02 11:58:02
  • Java编程中随机数的生成方式总结

    2022-06-14 11:57:27
  • Java多线程开发工具之CompletableFuture的应用详解

    2023-08-30 00:43:00
  • 利用Java读取二进制文件实例详解

    2023-07-27 03:25:42
  • Java多线程中关于join方法的使用实例解析

    2023-08-22 21:47:29
  • Java 读取外部资源的方法详解及实例代码

    2023-01-27 21:19:18
  • 浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别

    2022-05-27 00:37:31
  • springMvc请求的跳转和传值的方法

    2023-02-06 17:29:56
  • Android Studio提示inotify大小不足的解决办法

    2022-01-06 23:48:07
  • WPF实现魔方小游戏

    2022-09-06 01:53:18
  • Javaweb会话跟踪技术Cookie和Session的具体使用

    2022-06-24 21:16:33
  • Android SurfaceView拍照录像实现方法

    2022-06-18 17:07:20
  • Java手写线程池的实现方法

    2023-10-30 12:50:03
  • java中for和forEach的速度比较实例Demo

    2022-06-20 07:09:58
  • Java超详细讲解抽象类的原理与用法

    2022-10-31 20:51:42
  • C#使用SharpZipLib压缩解压文件

    2021-10-27 18:56:21
  • 解决Android studio3.6安装后gradle Download失败(构建不成功)

    2021-07-20 15:38:42
  • asp之家 软件编程 m.aspxhome.com