问题标签 [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.
.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 的限制?
wcf - DataContractSerializer XML 是 XML 序列化程序输出大小的两倍 - 这真的更快、更具可扩展性吗?
我正在升级一项宁静的服务,现在正在使用 DataContractSerializer 来输出响应。以前的版本只是使用带有 XmlSerializer 的自定义序列化。因为那个版本使用了很多属性,而 DCS 从来没有,我看到新的响应大小是使用 gzip 压缩时的先前版本大小的 1.5 倍。(或未压缩时大小的近 3 倍)。
那么我的问题是,DCS 是否真的会成为比 XmlSerializer 更快、更具可扩展性的解决方案。
c# - 用于数据库存储的 BOM 编码
我正在使用以下代码来序列化一个对象:
不幸的是,当我将它保存到数据库(使用 LINQ to SQL)然后查询数据库时,字符串似乎以问号开头:
我该如何摆脱它?当我尝试使用以下内容进行反序列化时:
我得到以下异常:
“第 1 行位置 1 出错。从命名空间‘ http://schemas.microsoft.com/2003/10/Serialization/ ’中期待元素‘anyType’。遇到名称为‘’,命名空间‘’的‘文本’。”
messageSerializer
使用的实现DataContractSerializer
如下:
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 是个坏主意?有没有更好的技术?我是在没有桨的小溪上吗?
.net - DataContractSerializer、EmitDefaultValue 和空标签
我正在努力通过 mvc 站点序列化一些对象并通过 xml、json 等返回内容,我正在寻找不发送空元素的最佳方法。
在一个完美的世界中,只需将 EmitDefaultValue:=False 附加到 DataContract 中的 DataMembers 就足够了,但在某些情况下,它就是行不通。
String 默认值为 Nothing,但如果它们是 Nothing 或 String.Empty,我不想序列化它们。列表和集合也是如此。我不希望他们序列化,如果他们什么都不是,或者他们是空的,计数为 0。
似乎有一些不那么漂亮的选择。
- 自定义
XmlTextWriter
缓冲并丢弃空元素 - 在对象被序列化之前,循环遍历 prop,将 Empty 设置为 Nothing,将 Count-0 设置为 Nothing
- 删除空元素的 XSLT
- 正则表达式输出字符串的输出
所有这些似乎都有些邪恶,1 是最不邪恶的,但要做的事情微不足道。有没有其他的技巧呢?
silverlight - Silverlight 序列化/反序列化问题
我正在寻找一种将 Silverlight 对象持久保存到用户 PC 上的方法,然后对它们进行重新水化,以便用户可以完成对它们的编辑。
序列化DataContractSerializer
并坚持IsolatedStorageFile
工作正常。但是,反序列化会导致问题。这是导致失败的代码:
反序列化器调用属性设置器,后者又抛出异常并中止反序列化。
我已经尝试显式应用DataContract
//属性DataMember
,IgnoreDataMember
但是它不能很好地与私有字段一起使用:
System.Security.SecurityException 发生 Message="The data contract type 'Trident.Model.Journey.JourneyApplication' cannot be serialized because the member '_TravellerSavingsAmount' is not public. 将成员设为 public 将修复此错误。或者,您可以将其设为“
如何在反序列化期间绕过属性设置器?
我想让我的课程专注于该领域,而不是受到基础设施问题的污染。
c# - WCF:仅在 json 上返回必要的属性
由于性能调整,我想只返回必要的属性。有没有可能/解决方法?伪/示例代码理解:
和服务:
.net - 忽略 DataContractSerializer 中的字段顺序
反序列化时,DataContractSerializer 不仅要求元素名称匹配,还要求它相对于其他元素具有一定的顺序。
我的应用程序是这样的,每个字段都可以通过其名称唯一标识。因此,我希望 XML 文件能够以任何顺序包含元素,并且反序列化器仍然可以工作。
是否可以像这样设置 DataContract?
数据成员顺序中的介绍性段落表明顺序是可选的,但我还没有找到一种方法来实际使其成为可选。
.net - 使用 DataContractSerializer 进行简单的数据文件版本控制
阅读数据合同版本控制后,我们得出结论,这并不是故事的全部。例如,如果您以前有 ValueA,而在新版本中它现在称为 ValueB 并且属于不同类型,您需要将 ValueA 转换为 ValueB,会发生什么情况?
我可以使用一些回调来帮助解决这个问题,但如果我们期望格式在很长一段时间内频繁更改,它看起来不是一个非常可维护的解决方案。
我们解决的解决方案是保留“按版本保存”字段,并在加载文件时根据需要调用特定于旧版本的转换例程。这些转换例程知道如何将旧数据的 XML 转换为新数据的 XML。
然而,事实证明,DataContractSerializes 要求元素的顺序完全符合它的预期。这意味着我们的转换过程必须知道将元素插入到正确的位置。如果考虑到继承,这比简单地添加具有已知名称的元素要困难得多。使用继承,您不能可靠地AddBeforeSelf
或AddAfterSelf
任何字段,这仅仅是因为没有一个字段始终位于该新字段旁边。
撇开 DataContractSerializer 如此严格的原因不谈,你能建议解决这个问题的方法吗?也许是一篇关于如何与非常旧的数据合约保持向后兼容的好文章,在您对格式进行第 100 次重大更改时不会变得笨拙。
本文中有一些额外的指导方针,但这一定是为了不同的目的而编写的。例如,我们不可能让旧数据成员永远闲置(第 9 点)。似乎大多数此类文章都是从通信协议的角度编写的,而不是将数据存储在文件中。
wcf - 分析 XML 序列化对象图以找出占用最多空间的内容
我们有一些由 WCF 服务(使用wsHttpBinding
)公开并序列化为 XML 的对象。以下是其中一个的摘录:
如您所见,有许多集合,其中一些包含的对象在它们下面还有更多的子对象。当我们针对我们的生产数据运行它时,我们发现虽然大多数 Person 记录都很好,但有些记录会转化为非常大的序列化消息(例如,>500 KB)。
现在我希望我们需要开始修剪我们的对象图,但我想找出哪些数据位对序列化消息的贡献最大。例如,它是Address
对象列表,还是对象中的一些数据块InternationalExperience
。
您是否知道有一种工具可以捕获和分析正在发送的 XML 消息,以便我可以找出占用最多空间的内容?