C# DataContractSerializer的行为与KnownTypes和泛型相混淆

C# DataContractSerializer的行为与KnownTypes和泛型相混淆,c#,generics,reflection,datacontractserializer,known-types,C#,Generics,Reflection,Datacontractserializer,Known Types,我试图为任意对象生成KnownType列表,但在尝试使用泛型成员序列化类型时遇到问题,例如DbEntityValidationException,它的list属性类型为IEnumerable 调用DataContractSerializer的构造函数时,我会向其提供一个KnownTypes列表,该列表由以下类型组成,通过使用反射来获取其所有属性的类型以及任何泛型类型参数: var serializer = new DataContractSerializer(source.GetType(),

我试图为任意对象生成KnownType列表,但在尝试使用泛型成员序列化类型时遇到问题,例如
DbEntityValidationException
,它的list属性类型为
IEnumerable

调用DataContractSerializer的构造函数时,我会向其提供一个KnownTypes列表,该列表由以下类型组成,通过使用反射来获取其所有属性的类型以及任何泛型类型参数:

var serializer = new DataContractSerializer(source.GetType(), knownsTypesPlusGenerics);
var stringWriter = new StringWriter(CultureInfo.InvariantCulture);
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    serializer.WriteObject(xmlTextWriter, source);
}
此列表由以下类型组成,通过跟踪捕获:

System.Data.Entity.Validation.DbEntityValidationException
System.Collections.Generic.List`1[[System.Data.Entity.Validation.DbEntityValidationResult, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
System.Collections.ListDictionaryInternal
System.Data.Entity.Validation.DbEntityValidationResult
然而,出于某种原因,DataContractSerializer抛出缺少的类型,就好像list属性的类型是
list
,而不是
list

System.Runtime.Serialization.SerializationException:Type'System.Collections.Generic.List``1[[System.Object,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]],数据协定名称为“ArrayOfanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays”他说。考虑使用DATACONTRORTCORDEVER或将未知类型的任何类型添加到已知类型的列表中——例如,使用NoNyType属性或将它们添加到传递给DATACONTROTTRORIGLASER的已知类型列表中。< /代码> 


当DataContractSerializer没有使用该类型,并且我提供了实际使用的类型时,为什么DataContractSerializer会抱怨该类型?

在对象图中的某个位置,列表可能需要序列化

DataContractSerializer认为List与List不同,因此typeof(List)必须是传递给DataContractSerializer构造函数的类型之一


尝试一下,看看是否有帮助。

您是否有时间解决您的问题?