From 9e801ce419a079e36bdcb8f9d3d6d555d1bc4937 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 18 Oct 2021 17:15:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20XmlSerializer=20?= =?UTF-8?q?=E6=BD=9C=E5=9C=A8=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Utilities/Internal/XmlUtility.cs | 14 ++++++++++++-- .../Utilities/Internal/XmlUtility.cs | 14 ++++++++++++-- .../Utilities/Internal/XmlUtility.cs | 14 ++++++++++++-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Internal/XmlUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Internal/XmlUtility.cs index 8a405afe..cd7f4ec2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Internal/XmlUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/Internal/XmlUtility.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.IO; using System.Text; using System.Text.RegularExpressions; @@ -9,6 +10,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities { internal static class XmlUtility { + // REF: https://docs.microsoft.com/zh-cn/dotnet/api/system.xml.serialization.xmlserializer#dynamically-generated-assemblies + private static Hashtable _serializers = new Hashtable(); + public static string Serialize(Type type, object obj) { string xml; @@ -20,10 +24,16 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities settings.WriteEndDocumentOnClose = false; settings.NamespaceHandling = NamespaceHandling.OmitDuplicates; + string skey = type.AssemblyQualifiedName; + XmlSerializer? xmlSerializer = (XmlSerializer)_serializers[skey]; + if (xmlSerializer == null) + { + xmlSerializer = new XmlSerializer(type, new XmlRootAttribute("xml")); + _serializers[skey] = xmlSerializer; + } + using var stream = new MemoryStream(); using var writer = XmlWriter.Create(stream, settings); - - XmlSerializer xmlSerializer = new XmlSerializer(type, new XmlRootAttribute("xml")); XmlSerializerNamespaces xmlNamespace = new XmlSerializerNamespaces(); xmlNamespace.Add(string.Empty, string.Empty); xmlSerializer.Serialize(writer, obj, xmlNamespace); diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/Internal/XmlUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/Internal/XmlUtility.cs index 48777ae0..92d2ffdf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/Internal/XmlUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/Internal/XmlUtility.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.IO; using System.Text; using System.Text.RegularExpressions; @@ -9,6 +10,9 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities { internal static class XmlUtility { + // REF: https://docs.microsoft.com/zh-cn/dotnet/api/system.xml.serialization.xmlserializer#dynamically-generated-assemblies + private static Hashtable _serializers = new Hashtable(); + public static string Serialize(Type type, object obj) { string xml; @@ -20,10 +24,16 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities settings.WriteEndDocumentOnClose = false; settings.NamespaceHandling = NamespaceHandling.OmitDuplicates; + string skey = type.AssemblyQualifiedName; + XmlSerializer? xmlSerializer = (XmlSerializer)_serializers[skey]; + if (xmlSerializer == null) + { + xmlSerializer = new XmlSerializer(type, new XmlRootAttribute("xml")); + _serializers[skey] = xmlSerializer; + } + using var stream = new MemoryStream(); using var writer = XmlWriter.Create(stream, settings); - - XmlSerializer xmlSerializer = new XmlSerializer(type, new XmlRootAttribute("xml")); XmlSerializerNamespaces xmlNamespace = new XmlSerializerNamespaces(); xmlNamespace.Add(string.Empty, string.Empty); xmlSerializer.Serialize(writer, obj, xmlNamespace); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/Internal/XmlUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/Internal/XmlUtility.cs index 6c63464b..99bdf5fc 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/Internal/XmlUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/Internal/XmlUtility.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.IO; using System.Text; using System.Text.RegularExpressions; @@ -9,6 +10,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities { internal static class XmlUtility { + // REF: https://docs.microsoft.com/zh-cn/dotnet/api/system.xml.serialization.xmlserializer#dynamically-generated-assemblies + private static Hashtable _serializers = new Hashtable(); + public static string Serialize(Type type, object obj) { string xml; @@ -20,10 +24,16 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities settings.WriteEndDocumentOnClose = false; settings.NamespaceHandling = NamespaceHandling.OmitDuplicates; + string skey = type.AssemblyQualifiedName; + XmlSerializer? xmlSerializer = (XmlSerializer)_serializers[skey]; + if (xmlSerializer == null) + { + xmlSerializer = new XmlSerializer(type, new XmlRootAttribute("xml")); + _serializers[skey] = xmlSerializer; + } + using var stream = new MemoryStream(); using var writer = XmlWriter.Create(stream, settings); - - XmlSerializer xmlSerializer = new XmlSerializer(type, new XmlRootAttribute("xml")); XmlSerializerNamespaces xmlNamespace = new XmlSerializerNamespaces(); xmlNamespace.Add(string.Empty, string.Empty); xmlSerializer.Serialize(writer, obj, xmlNamespace);