问题标签 [datacontractserializer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
15108 浏览

c# - 反序列化器不知道映射到该合约的任何类型

我正在尝试序列化和反序列化 Node 对象树。我的抽象“节点”类以及从它派生的其他抽象和具体类在我的“Informa”项目中定义。此外,我在 Informa 中创建了一个用于序列化/反序列化的静态类。

首先,我将树解构为Dictionary(guid,Node)类型的平面列表,其中 guid 是 Node 的唯一 ID。

我能够毫无问题地序列化我的所有节点。但是当我尝试反序列化时,我得到以下异常。

第 1 行位置 227 出错。元素“ http://schemas.microsoft.com/2003/10/Serialization/Arrays:Value ”包含“Informa:Building”数据合同的数据。反序列化器不知道映射到该合约的任何类型。将与“Building”对应的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 或将其添加到传递给 DataContract Serializer 的已知类型列表中。

从 Node 派生的所有类,包括 Building,都应用了[KnownType(typeof(type t))]属性。

我的序列化和反序列化方法如下:

0 投票
1 回答
9779 浏览

c# - RuntimeType:http://schemas.datacontract.org/2004/07/System' 不是预期的

好的,所以我让 DataContractSerializer 与我的对象图一起工作。有关更多信息,请参阅我以前的问题。

树结构的序列化/反序列化

反序列化器不知道映射到该合约的任何类型

但是,我的一个字段_UserPropertyDefinitions的定义如下所示。它定义了该用户可以添加到数据结构中的对象的自定义属性列表。字符串是标识属性的唯一键,Type 是属性的类型,它始终是原始类型,如 Bool、Int、String 等。

每个对象都有一个对应的Dictionary(String key, Object value)集合来存储它为任何“用户属性”设置的值

当这个属性是一个空集合时,我的对象图可以很好地序列化,但是一旦我向这个集合添加了一个自定义属性,我在尝试使用 DataContractSerializer 序列化时得到以下异常。

不应使用数据合同名称为“RuntimeType: http://schemas.datacontract.org/2004/07/System ”的类型“System.RuntimeType”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

如果我删除该字段的 DataMember 属性,我可以序列化/反序列化而不会出现异常,但我当然会丢失我在该字段中创建的设置。

0 投票
5 回答
30956 浏览

c# - DataContractSerializer 创建的 XML 格式

有没有一种简单的方法可以让 DataContractSerializer 吐出格式化的 XML 而不是一个长字符串?我不想以任何方式更改标签或内容,只需添加换行符和缩进以使 XML 更具可读性?

0 投票
3 回答
13992 浏览

entity-framework - DataContractSerializer:如何序列化没有 DataContract/DataMember 属性的类/成员

DataContractSerializer需要用DataContractDataMember属性标记类和成员。但是,在我的情况下,这些类是使用 EFPocoAdapater 框架自动生成的,并且这些属性不存在。

在不存在这些属性的情况下,如何使用 DataContractSerializer 强制对所有成员进行序列化?

来自亚历克斯德:

这在 3.5SP1 中发生了变化,希望您看到: http ://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx

0 投票
1 回答
953 浏览

wcf - DataContractSerializer 每个请求多次序列化同一个对象

我正在编写将由 Silverlight 应用程序使用的 WCF 应用程序。我已经完成了大部分的设计工作,现在我正在实施,这让我想出了这个问题。

这是我的应用程序中存在的示例:

这就是我的意思:在我的应用程序中 mostRecentlyUsedTowel 将指向该人健身房的毛巾列表中的某些内容。我的一些请求将序列化一个 Person 对象。

DataContractSerializer 是否足够聪明,可以注意到它被要求序列化完全相同的对象实例两次?如果是这样,它是如何处理的?

如果它只是将同一个实例序列化两次,我应该如何处理这个问题,这样我就不会通过链接发送不必要的数据?

0 投票
2 回答
3562 浏览

c# - 为什么我不能使用 DataContractSerializer 序列化对象?

我正在尝试使用 DataContractSerializer 序列化一个类型,并得到以下异常。这不适用于 SOA 服务,但如果可能,我仍然希望使用 DataContractSerializer。我正在使用.Net 3.5 SP1。

预计不会使用数据合同名称“DelegateSerializationHolder.DelegateEntry: http://schemas.datacontract.org/2004/07/System ”键入“System.DelegateSerializationHolder+DelegateEntry”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

0 投票
3 回答
3285 浏览

wcf - WCF 继承/多态和序列化

我有一个类,ReportDef,它是一个具体的类,我根据需要使用[DataContract][DataMember]属性进行了装饰。 与我的,一起ReportDef组装。然后我有另一个类,,它派生自并在 assembly 。 没有服务关心的附加状态。 A1ServiceContractIReportServiceUiReportDefReportDefA2UiReportDef

我想用UiReportDef. 有没有办法(除了手动构造一个ReportDef实例UiReportDef)在我的服务不知道的情况下做到这一点A2?我知道KnownType。我不想参考A2


编辑:这里有一些上下文可能会让我的问题更容易理解。我的ServiceContract工具IReportService定义了一个方法,RunReport(ReportDef report). ReportDefDataContract属性装饰,并且有用 . 装饰的私有成员DataMemberUiReportDef是在依赖于UI相关程序集等的程序集中。我没有设计现有的类层次结构。我需要将ReportDefsand UiReportDefs(as ReportDefs) 传递给新服务。由于ReportDef是具体的,我希望序列化程序UiReportDefsReportDefs没有任何其他信息的情况下处理。

0 投票
2 回答
558 浏览

.net - DataContractSerializer:为什么不删除成员?

我正在阅读 Microsoft's Best Practices: Data Contract Versioning,他们指出:

不要在以后的版本中删除数据成员,即使IsRequired属性在以前的版本中保留为默认属性false 。

任何人都可以提出任何理由吗?他们没有详细说明。由于他们说可以在以后的版本中添加数据成员,因此删除似乎也可以 - 实际上,旧版本会将其视为添加。

我想,不同之处在于您应该在最后添加新成员(使用 DataMemberAttribute 上的 Order 属性),而被删除的属性可能不会在最后。但是他们也说在加载的时候丢失的成员会保持默认值,所以很明显,丢失的成员是可以的。

我错过了什么?如果我废弃了我的产品的某个功能并删除了与之相关的 [DataMember] 属性,我会导致哪些版本互操作问题(向前兼容和向后兼容)?

此外,如果我决定对前向兼容性不感兴趣(即,如果我不担心旧版本打开新文件),是否还会存在此类问题?

0 投票
2 回答
9145 浏览

c# - 使用 DataContractSerializer 自定义序列化

我正在考虑使用 DataContractSerializer,但我无法获得正确的输出格式。DataContractSerializer 序列化以下类

进入

但我想要的是

如何使用 DataContractSerializer 执行此操作?还要维护 DataContractJsonSerializer 的第一个输出?

0 投票
1 回答
3930 浏览

wcf - 为不同程序集中的数据协定声明已知类型

我在 WCF 服务中有一个方法,它返回一个复杂类型 (myComplexResult),其中包括一个列表 (Of Common.myBaseClass) 作为其成员之一。我希望这个列表包含不同类型的 Foo.myClass1 和 Bar.myClass2 的项目,它们都继承自 Common.myBaseClass。请注意,所有这些类都在不同的程序集中定义。

该服务抛出此异常:

不应使用数据合同名称“myClass1: http://mynamespace/foo/ ”键入“Foo.myClass1” 。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

好的,所以我意识到我需要将 myClass1 和 myClass2 声明为 myBaseClass 的已知类型,以便 DataContractSerializer 知道如何处理它们。我不能做显而易见的事情并使用 myClass1 和 myClass2 的 KnownType 属性来装饰 myBaseClass 类,因为这意味着添加对 Foo 和 Bar 程序集的引用,这会导致循环依赖。

我希望在我的配置文件中使用 declareTypes 并且我尝试了这个:

这似乎没有帮助,所以我尝试将 KnownType 属性添加到 myComplexResult:

但我仍然遇到同样的错误。帮助!我该怎么办?