问题标签 [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 投票
2 回答
6628 浏览

.net - 从“更新服务参考”中获取错误的生成代码

在 VB.NET(使用 Visual Studio 2008)中,我的 WCF 服务有一个类似的接口:

我最近更改了两个具有相似代码的项目,以使用 basicHttpBinding 而不是 wsHttpBinding。一切都在服务端编译得很好。现在,在客户端应用程序中,我选择“更新服务参考”。在一个项目中,我生成的 reference.vb 似乎是正确的——不到 100 行,每种方法都有简单的包装器。但是,另一方面,生成的 reference.vb 似乎无法理解服务是什么。我得到一个超过 1000 行的 reference.vb,如下所示:

就好像生成的代码对我的实际服务接口一无所知。知道如何解决这个问题吗?提前致谢。

编辑:看起来我需要确保服务器可以使用 DataContractSerializer 而不是 XmlSerializer:请参阅http://blogs.msdn.com/sonuarora/archive/2007/06/16/contract-generation-from-wsdl- xml-schema-datacontractserializer-vs-xmlserializer.aspx。有谁知道我如何弄清楚我的代码(可能在 Class Thing 中)违反了 DataContractSerializer 的限制?

0 投票
2 回答
1833 浏览

wcf - DataContractSerializer XML 是 XML 序列化程序输出大小的两倍 - 这真的更快、更具可扩展性吗?

我正在升级一项宁静的服务,现在正在使用 DataContractSerializer 来输出响应。以前的版本只是使用带有 XmlSerializer 的自定义序列化。因为那个版本使用了很多属性,而 DCS 从来没有,我看到新的响应大小是使用 gzip 压缩时的先前版本大小的 1.5 倍。(或未压缩时大小的近 3 倍)。

那么我的问题是,DCS 是否真的会成为比 XmlSerializer 更快、更具可扩展性的解决方案。

0 投票
1 回答
861 浏览

c# - 用于数据库存储的 BOM 编码

我正在使用以下代码来序列化一个对象:

不幸的是,当我将它保存到数据库(使用 LINQ to SQL)然后查询数据库时,字符串似乎以问号开头:

我该如何摆脱它?当我尝试使用以下内容进行反序列化时:

我得到以下异常:

“第 1 行位置 1 出错。从命名空间‘ http://schemas.microsoft.com/2003/10/Serialization/ ’中期待元素‘anyType’。遇到名称为‘’,命名空间‘’的‘文本’。”

messageSerializer使用的实现DataContractSerializer如下:

0 投票
2 回答
2393 浏览

wcf - 如何加快大型对象图的序列化和传输;WCF 3.5 和 SL3

我有一个 3.5 SP1 项目,WCF 服务仅限于 Silverlight 3 客户端使用。由于业务需求,我们必须使用大型对象图,这些对象图通过 WCF 端的 SQL Server 进行水合,然后发送到 Silverlight 客户端。它们很深,您可能有一个具有两个集合属性的类,并且集合中的每个项目内部都有集合。基本设计就是它,我继承的东西,必须在短期内工作。我们说的有多大?在不使用任何修改(httpBinding 和 DataContractSerializer)的情况下,一个包含 250 个项目的顶级集合示例是 14mb。250 个项目很小,我们面临的要求要求我们能够使用 10 个,鉴于我有限的数学技能,000 多个项目远远超过 500mb 可以拉过电线。不能在公园里散步——事实上——你可以在公园里散步,而这一切都在搅动。

所以我们正在考虑几件事,一是远离 DataContractSerializer 并使用 XmlSerializer,这样我们就可以将许多这些属性移动到属性中并减少有效负载大小。我们也在研究二进制 Xml 绑定。

我的问题是,你会怎么做?IIS 压缩可以在这里发挥作用吗?离开 DCS 是个坏主意?有没有更好的技术?我是在没有桨的小溪上吗?

0 投票
1 回答
1257 浏览

.net - DataContractSerializer、EmitDefaultValue 和空标签

我正在努力通过 mvc 站点序列化一些对象并通过 xml、json 等返回内容,我正在寻找不发送空元素的最佳方法。

在一个完美的世界中,只需将 EmitDefaultValue:=False 附加到 DataContract 中的 DataMembers 就足够了,但在某些情况下,它就是行不通。

String 默认值为 Nothing,但如果它们是 Nothing 或 String.Empty,我不想序列化它们。列表和集合也是如此。我不希望他们序列化,如果他们什么都不是,或者他们是空的,计数为 0。

似乎有一些不那么漂亮的选择。

  1. 自定义XmlTextWriter缓冲并丢弃空元素
  2. 在对象被序列化之前,循环遍历 prop,将 Empty 设置为 Nothing,将 Count-0 设置为 Nothing
  3. 删除空元素的 XSLT
  4. 正则表达式输出字符串的输出

所有这些似乎都有些邪恶,1 是最不邪恶的,但要做的事情微不足道。有没有其他的技巧呢?

0 投票
1 回答
615 浏览

silverlight - Silverlight 序列化/反序列化问题

我正在寻找一种将 Silverlight 对象持久保存到用户 PC 上的方法,然后对它们进行重新水化,以便用户可以完成对它们的编辑。

序列化DataContractSerializer并坚持IsolatedStorageFile工作正常。但是,反序列化会导致问题。这是导致失败的代码:

反序列化器调用属性设置器,后者又抛出异常并中止反序列化。

我已经尝试显式应用DataContract//属性DataMemberIgnoreDataMember但是它不能很好地与私有字段一起使用:

System.Security.SecurityException 发生 Message="The data contract type 'Trident.Model.Journey.JourneyApplication' cannot be serialized because the member '_TravellerSavingsAmount' is not public. 将成员设为 public 将修复此错误。或者,您可以将其设为“

如何在反序列化期间绕过属性设置器?

我想让我的课程专注于该领域,而不是受到基础设施问题的污染。

0 投票
2 回答
693 浏览

c# - WCF:仅在 json 上返回必要的属性

由于性能调整,我想只返回必要的属性。有没有可能/解决方法?伪/示例代码理解:

和服务:

0 投票
1 回答
6580 浏览

.net - 忽略 DataContractSerializer 中的字段顺序

反序列化时,DataContractSerializer 不仅要求元素名称匹配,还要求它相对于其他元素具有一定的顺序。

我的应用程序是这样的,每个字段都可以通过其名称唯一标识。因此,我希望 XML 文件能够以任何顺序包含元素,并且反序列化器仍然可以工作。

是否可以像这样设置 DataContract?

数据成员顺序中的介绍性段落表明顺序是可选的,但我还没有找到一种方法来实际使其成为可选。

后续问题使用 DataContractSerializer 进行简单数据文件版本控制

0 投票
2 回答
1702 浏览

.net - 使用 DataContractSerializer 进行简单的数据文件版本控制

阅读数据合同版本控制后,我们得出结论,这并不是故事的全部。例如,如果您以前有 ValueA,而在新版本中它现在称为 ValueB 并且属于不同类型,您需要将 ValueA 转换为 ValueB,会发生什么情况?

我可以使用一些回调来帮助解决这个问题,但如果我们期望格式在很长一段时间内频繁更改,它看起来不是一个非常可维护的解决方案。

我们解决的解决方案是保留“按版本保存”字段,并在加载文件时根据需要调用特定于旧版本的转换例程。这些转换例程知道如何将旧数据的 XML 转换为新数据的 XML。

然而,事实证明,DataContractSerializes 要求元素的顺序完全符合它的预期。这意味着我们的转换过程必须知道将元素插入到正确的位置。如果考虑到继承,这比简单地添加具有已知名称的元素要困难得多。使用继承,您不能可靠地AddBeforeSelfAddAfterSelf 任何字段,这仅仅是因为没有一个字段始终位于该新字段旁边。

撇开 DataContractSerializer 如此严格的原因不谈,你能建议解决这个问题的方法吗?也许是一篇关于如何与非常旧的数据合约保持向后兼容的好文章,在您对格式进行第 100 次重大更改时不会变得笨拙。

本文中有一些额外的指导方针,但这一定是为了不同的目的而编写的。例如,我们不可能让旧数据成员永远闲置(第 9 点)。似乎大多数此类文章都是从通信协议的角度编写的,而不是将数据存储在文件中。

0 投票
2 回答
242 浏览

wcf - 分析 XML 序列化对象图以找出占用最多空间的内容

我们有一些由 WCF 服务(使用wsHttpBinding)公开并序列化为 XML 的对象。以下是其中一个的摘录:

如您所见,有许多集合,其中一些包含的对象在它们下面还有更多的子对象。当我们针对我们的生产数据运行它时,我们发现虽然大多数 Person 记录都很好,但有些记录会转化为非常大的序列化消息(例如,>500 KB)。

现在我希望我们需要开始修剪我们的对象图,但我想找出哪些数据位对序列化消息的贡献最大。例如,它是Address对象列表,还是对象中的一些数据块InternationalExperience

您是否知道有一种工具可以捕获和分析正在发送的 XML 消息,以便我可以找出占用最多空间的内容?