From 1b7d13aa6db48929c413244d2c555be36ef15ee2 Mon Sep 17 00:00:00 2001
From: hudingwen <765472804@qq.com>
Date: Sat, 28 Oct 2023 18:21:49 +0800
Subject: [PATCH] =?UTF-8?q?xml=E5=BA=8F=E5=88=97=E5=8C=96=E5=86=85?=
=?UTF-8?q?=E5=AD=98=E6=B3=84=E6=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Blog.Core.Common/Helper/XmlHelper.cs | 52 +++++++++++++++++-----------
1 file changed, 32 insertions(+), 20 deletions(-)
diff --git a/Blog.Core.Common/Helper/XmlHelper.cs b/Blog.Core.Common/Helper/XmlHelper.cs
index 510c84a..f81d681 100644
--- a/Blog.Core.Common/Helper/XmlHelper.cs
+++ b/Blog.Core.Common/Helper/XmlHelper.cs
@@ -1,33 +1,40 @@
using System;
+using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace Blog.Core.Common.Helper
{
+ ///
+ /// xml序列化帮助类
+ ///
public class XmlHelper
{
+ ///
+ /// 存储序列类型,防止内存泄漏
+ ///
+ private static ConcurrentDictionary hasTypes = new ConcurrentDictionary();
///
/// 转换对象为JSON格式数据
///
/// 类
/// 对象
/// 字符格式的JSON数据
- public static string GetXML(object obj)
+ public static string GetXML(object obj, string rootName = "root")
{
- try
+ XmlSerializer xs;
+ var xsType = typeof(T);
+ hasTypes.TryGetValue(xsType, out xs);
+ if(xs == null)
{
- XmlSerializer xs = new XmlSerializer(typeof(T));
-
- using (TextWriter tw = new StringWriter())
- {
- xs.Serialize(tw, obj);
- return tw.ToString();
- }
+ xs = new XmlSerializer(typeof(T));
+ hasTypes.TryAdd(xsType, xs);
}
- catch (Exception)
+ using (TextWriter tw = new StringWriter())
{
- return string.Empty;
+ xs.Serialize(tw, obj);
+ return tw.ObjToString();
}
}
@@ -37,15 +44,20 @@ namespace Blog.Core.Common.Helper
///
///
///
- public static T ParseFormByXml(string xml,string rootName="root")
+ public static T ParseFormByXml(string xml, string rootName = "root")
{
- XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(rootName));
- StringReader reader = new StringReader(xml);
-
- T res = (T)serializer.Deserialize(reader);
- reader.Close();
- reader.Dispose();
- return res;
- }
+ XmlSerializer xs;
+ var xsType = typeof(T);
+ hasTypes.TryGetValue(xsType, out xs);
+ if (xs == null)
+ {
+ xs = new XmlSerializer(xsType, new XmlRootAttribute(rootName));
+ hasTypes.TryAdd(xsType, xs);
+ }
+ using (StringReader reader = new StringReader(xml))
+ {
+ return (T)xs.Deserialize(reader);
+ }
+ }
}
}