gpt4 book ai didi

c# - DataContractSerializer 的行为方式与 KnownTypes 和 Generics 混淆

转载 作者:行者123 更新时间:2023-11-30 12:59:59 28 4
gpt4 key购买 nike

我正在尝试为任意对象生成 KnownType 列表,但在尝试使用通用成员序列化类型时遇到了问题,例如 DbEntityValidationException它具有 IEnumerable<DbEntityValidationResult> 类型的列表属性.

在调用 DataContractSerializer 的构造函数时,我为其提供了一个包含以下类型的 KnownType 列表,这些类型是通过使用反射来获取其所有属性的类型以及任何泛型类型参数来构建的:

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<object>而不是 List<DbEntityValidationResult> :

System.Runtime.Serialization.SerializationException: Type 'System.Collections.Generic.List``1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' with data contract name 'ArrayOfanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

为什么 DataContractSerializer 在未使用该类型时会提示该类型,而当我提供实际类型时?

最佳答案

可能在对象图中的某处,List<{object}> 需要序列化。

DataContractSerializer 认为 List<{object}> 与 List<{any other type}> 不同,因此 typeof(List<{object}>) 必须是传递给 DataContractSerializer 构造函数的类型之一。

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

关于c# - DataContractSerializer 的行为方式与 KnownTypes 和 Generics 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com