NewLife/X

Xml序列化时可能写入List<T>对象,然而type是IList<T>,导致原有XmlList无法支持,现已增加支持
大石头 编写于 2019-01-06 22:12:47
共计: 修改6个文件,增加19行、删除12行。
修改 +1 -1
修改 +1 -1
修改 +2 -2
修改 +1 -1
修改 +2 -3
修改 +12 -4
修改 +1 -1
diff --git a/NewLife.Core/Serialization/Binary/BinaryDictionary.cs b/NewLife.Core/Serialization/Binary/BinaryDictionary.cs
index ab8970e..e11fcbc 100644
--- a/NewLife.Core/Serialization/Binary/BinaryDictionary.cs
+++ b/NewLife.Core/Serialization/Binary/BinaryDictionary.cs
@@ -21,7 +21,7 @@ namespace NewLife.Serialization
         /// <returns></returns>
         public override Boolean Write(Object value, Type type)
         {
-            if (!type.As<IDictionary>()) return false;
+            if (!type.As<IDictionary>() && !(value is IDictionary)) return false;
 
             var dic = value as IDictionary;
 
修改 +1 -1
diff --git a/NewLife.Core/Serialization/Binary/BinaryList.cs b/NewLife.Core/Serialization/Binary/BinaryList.cs
index bd7b384..2c50905 100644
--- a/NewLife.Core/Serialization/Binary/BinaryList.cs
+++ b/NewLife.Core/Serialization/Binary/BinaryList.cs
@@ -21,7 +21,7 @@ namespace NewLife.Serialization
         /// <returns></returns>
         public override Boolean Write(Object value, Type type)
         {
-            if (!type.As<IList>()) return false;
+            if (!type.As<IList>() && !(value is IList)) return false;
 
             var list = value as IList;
             // 先写入长度
修改 +2 -2
diff --git a/NewLife.Core/Serialization/Binary/BinaryPair.cs b/NewLife.Core/Serialization/Binary/BinaryPair.cs
index 9325036..ef17f8f 100644
--- a/NewLife.Core/Serialization/Binary/BinaryPair.cs
+++ b/NewLife.Core/Serialization/Binary/BinaryPair.cs
@@ -184,7 +184,7 @@ namespace NewLife.Serialization
         #region 字典名值对
         private Boolean WriteDictionary(Object value, Type type)
         {
-            if (!type.As<IDictionary>()) return false;
+            if (!type.As<IDictionary>() && !(value is IDictionary)) return false;
 
             var dic = value as IDictionary;
 
@@ -236,7 +236,7 @@ namespace NewLife.Serialization
         #region 数组名值对
         private Boolean WriteArray(Object value, Type type)
         {
-            if (!type.As<IList>()) return false;
+            if (!type.As<IList>() && !(value is IList)) return false;
 
             var list = value as IList;
             if (list == null || list.Count == 0) return true;
修改 +1 -1
diff --git a/NewLife.Core/Serialization/Json/JsonArray.cs b/NewLife.Core/Serialization/Json/JsonArray.cs
index 5ea8b97..3922091 100644
--- a/NewLife.Core/Serialization/Json/JsonArray.cs
+++ b/NewLife.Core/Serialization/Json/JsonArray.cs
@@ -68,7 +68,7 @@ namespace NewLife.Serialization
         /// <returns></returns>
         public override Boolean Write(Object value, Type type)
         {
-            if (!type.As<IList>()) return false;
+            if (!type.As<IList>() && !(value is IList)) return false;
 
             var list = value as IList;
 
修改 +2 -3
diff --git a/NewLife.Core/Serialization/Xml/XmlList.cs b/NewLife.Core/Serialization/Xml/XmlList.cs
index 9706cb2..421df32 100644
--- a/NewLife.Core/Serialization/Xml/XmlList.cs
+++ b/NewLife.Core/Serialization/Xml/XmlList.cs
@@ -1,7 +1,6 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
-using System.Xml;
 using NewLife.Reflection;
 
 namespace NewLife.Serialization
@@ -22,7 +21,7 @@ namespace NewLife.Serialization
         /// <returns></returns>
         public override Boolean Write(Object value, Type type)
         {
-            if (!type.As<IList>()) return false;
+            if (!type.As<IList>() && !(value is IList)) return false;
 
             var list = value as IList;
             if (list == null || list.Count == 0) return true;
@@ -69,7 +68,7 @@ namespace NewLife.Serialization
             var elmType = type.GetElementTypeEx();
 
             var list = value as IList;
-            if (list == null|| value is Array) list = typeof(List<>).MakeGenericType(elmType).CreateInstance() as IList;
+            if (list == null || value is Array) list = typeof(List<>).MakeGenericType(elmType).CreateInstance() as IList;
 
             // 清空已有数据
             list.Clear();
修改 +12 -4
diff --git a/Test/Program.cs b/Test/Program.cs
index 584237b..1882e0c 100644
--- a/Test/Program.cs
+++ b/Test/Program.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
 using System.Linq;
-using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using NewLife.Caching;
@@ -12,6 +11,7 @@ using NewLife.Remoting;
 using NewLife.Security;
 using NewLife.Serialization;
 using NewLife.Web;
+using NewLife.Xml;
 using XCode.Code;
 using XCode.DataAccessLayer;
 using XCode.Membership;
@@ -35,7 +35,7 @@ namespace Test
                 try
                 {
 #endif
-                Test3();
+                    Test3();
 #if !DEBUG
                 }
                 catch (Exception ex)
@@ -126,8 +126,16 @@ namespace Test
 
         static void Test3()
         {
-            var list = Department.FindAll();
-            Console.WriteLine(list.ToJson(true));
+            //var list = Department.FindAll();
+            //Console.WriteLine(list.ToJson(true));
+
+            var list = new List<Int32>() as IList<Int32>;
+            list.Add(12);
+            list.Add(34);
+            list.Add(56);
+
+            var xml = list.ToXml();
+            Console.WriteLine(xml);
         }
 
         static void Test4()