软件编程
位置:首页>> 软件编程>> C#编程>> C# 中对象序列化XML的方法

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

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

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

今天我们来看一下在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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com