问题标签 [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.
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))]属性。
我的序列化和反序列化方法如下:
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 属性,我可以序列化/反序列化而不会出现异常,但我当然会丢失我在该字段中创建的设置。
c# - DataContractSerializer 创建的 XML 格式
有没有一种简单的方法可以让 DataContractSerializer 吐出格式化的 XML 而不是一个长字符串?我不想以任何方式更改标签或内容,只需添加换行符和缩进以使 XML 更具可读性?
entity-framework - DataContractSerializer:如何序列化没有 DataContract/DataMember 属性的类/成员
DataContractSerializer
需要用DataContract
和DataMember
属性标记类和成员。但是,在我的情况下,这些类是使用 EFPocoAdapater 框架自动生成的,并且这些属性不存在。
在不存在这些属性的情况下,如何使用 DataContractSerializer 强制对所有成员进行序列化?
来自亚历克斯德:
这在 3.5SP1 中发生了变化,希望您看到: http ://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx
wcf - DataContractSerializer 每个请求多次序列化同一个对象
我正在编写将由 Silverlight 应用程序使用的 WCF 应用程序。我已经完成了大部分的设计工作,现在我正在实施,这让我想出了这个问题。
这是我的应用程序中存在的示例:
这就是我的意思:在我的应用程序中 mostRecentlyUsedTowel 将指向该人健身房的毛巾列表中的某些内容。我的一些请求将序列化一个 Person 对象。
DataContractSerializer 是否足够聪明,可以注意到它被要求序列化完全相同的对象实例两次?如果是这样,它是如何处理的?
如果它只是将同一个实例序列化两次,我应该如何处理这个问题,这样我就不会通过链接发送不必要的数据?
c# - 为什么我不能使用 DataContractSerializer 序列化对象?
我正在尝试使用 DataContractSerializer 序列化一个类型,并得到以下异常。这不适用于 SOA 服务,但如果可能,我仍然希望使用 DataContractSerializer。我正在使用.Net 3.5 SP1。
预计不会使用数据合同名称“DelegateSerializationHolder.DelegateEntry: http://schemas.datacontract.org/2004/07/System ”键入“System.DelegateSerializationHolder+DelegateEntry”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
wcf - WCF 继承/多态和序列化
我有一个类,ReportDef
,它是一个具体的类,我根据需要使用[DataContract]
和[DataMember]
属性进行了装饰。 与我的,一起ReportDef
组装。然后我有另一个类,,它派生自并在 assembly 。 没有服务关心的附加状态。 A1
ServiceContract
IReportService
UiReportDef
ReportDef
A2
UiReportDef
我想用UiReportDef
. 有没有办法(除了手动构造一个ReportDef
实例UiReportDef
)在我的服务不知道的情况下做到这一点A2
?我知道KnownType
。我不想参考A2
。
编辑:这里有一些上下文可能会让我的问题更容易理解。我的ServiceContract
工具IReportService
定义了一个方法,RunReport(ReportDef report)
. ReportDef
用DataContract
属性装饰,并且有用 . 装饰的私有成员DataMember
。 UiReportDef
是在依赖于UI相关程序集等的程序集中。我没有设计现有的类层次结构。我需要将ReportDefs
and UiReportDefs
(as ReportDefs
) 传递给新服务。由于ReportDef
是具体的,我希望序列化程序UiReportDefs
在ReportDefs
没有任何其他信息的情况下处理。
.net - DataContractSerializer:为什么不删除成员?
我正在阅读 Microsoft's Best Practices: Data Contract Versioning,他们指出:
不要在以后的版本中删除数据成员,即使IsRequired属性在以前的版本中保留为默认属性false 。
任何人都可以提出任何理由吗?他们没有详细说明。由于他们说可以在以后的版本中添加数据成员,因此删除似乎也可以 - 实际上,旧版本会将其视为添加。
我想,不同之处在于您应该在最后添加新成员(使用 DataMemberAttribute 上的 Order 属性),而被删除的属性可能不会在最后。但是他们也说在加载的时候丢失的成员会保持默认值,所以很明显,丢失的成员是可以的。
我错过了什么?如果我废弃了我的产品的某个功能并删除了与之相关的 [DataMember] 属性,我会导致哪些版本互操作问题(向前兼容和向后兼容)?
此外,如果我决定对前向兼容性不感兴趣(即,如果我不担心旧版本打开新文件),是否还会存在此类问题?
c# - 使用 DataContractSerializer 自定义序列化
我正在考虑使用 DataContractSerializer,但我无法获得正确的输出格式。DataContractSerializer 序列化以下类
进入
但我想要的是
如何使用 DataContractSerializer 执行此操作?还要维护 DataContractJsonSerializer 的第一个输出?
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:
但我仍然遇到同样的错误。帮助!我该怎么办?