• 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

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

  • 相关阅读:
    创建nodejs服务器
    研磨设计模式学习笔记2外观模式Facade
    研磨设计模式学习笔记4单例模式Signleton
    研磨设计模式学习笔记1简单工厂(SimpleFactory)
    getResourceAsStream小结
    研磨设计模式学习笔记3适配器模式Adapter
    oracle数据库代码块
    DecimalFormat
    .NET中常用的代码(转载)
    WebClient的研究笔记
  • 原文地址:https://www.cnblogs.com/SevenWang/p/14306392.html
Copyright © 2020-2023  润新知