Xml序列化时可能写入List<T>对象,然而type是IList<T>,导致原有XmlList无法支持,现已增加支持大石头 编写于 2019-01-06 22:12:47
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;
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;
// 先写入长度
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;
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;
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();
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()