C# 对象的xml序列化和反序列化

由于xml序列化会带来很大的性能损失,我们往往采用缓存来保存数据

序列化和反序列化代码

  

 public static class Helper
    {
        static Hashtable xmlserialCache = new Hashtable();
        static XmlSerializer GetXmlSerializer(Type type, string defaultNameSpace)
        {
            string key = string.Concat(type.Name, defaultNameSpace).GetHashCode().ToString();
            if (!xmlserialCache.ContainsKey(key))
            {
                lock (xmlserialCache.SyncRoot)
                {
                    if (!xmlserialCache.ContainsKey(key))
                    {
                        xmlserialCache.Add(key, new XmlSerializer(type, defaultNameSpace));
                    }
                }
            }
            return xmlserialCache[key] as XmlSerializer;
        }

        public static T GetInstance<T>(string xml) where T : class
        {
            object obj = null;
            using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
            {
                using (XmlTextReader xmlTextReader = new XmlTextReader(memoryStream))
                {
                    xmlTextReader.WhitespaceHandling = WhitespaceHandling.All;
                    XmlSerializer xmlSerializer = GetXmlSerializer(typeof(T), string.Empty);
                    obj = xmlSerializer.Deserialize(xmlTextReader);
                }

            }
            return obj as T;

        }

        public static string ToXml<T>(T t) where T : class
        {
            string xml = string.Empty;
            using (MemoryStream rawMemoryStream = new MemoryStream())
            {
                using (XmlTextWriter xmlTextWriter = new XmlTextWriter(rawMemoryStream, Encoding.UTF8))
                {
                    xmlTextWriter.Formatting = Formatting.Indented;
                    //xmlTextWriter.Formatting = Formatting.None;  
                    XmlSerializer xmlSerializer = GetXmlSerializer(typeof(T), string.Empty);
                    xmlSerializer.Serialize(xmlTextWriter, t);

                    xml = Encoding.UTF8.GetString(rawMemoryStream.GetBuffer(), 0, (int)rawMemoryStream.Length);
                }
            }
            return xml;
        }

    }

使用代码:

原始的xml文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值