我是靠谱客的博主 时尚便当,最近开发中收集的这篇文章主要介绍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);

下面来看封装类

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

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

以上就是C# 中对象序列化XML的方法的详细内容,更多关于c# 对象序列化XML的资料请关注靠谱客其它相关文章!

最后

以上就是时尚便当为你收集整理的C# 中对象序列化XML的方法的全部内容,希望文章能够帮你解决C# 中对象序列化XML的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部