问题标签 [netdatacontractserializer]

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 投票
0 回答
2566 浏览

c# - NetDataContractSerializer 和 WCF

我有一个场景,我需要使用 NetDataContractSerializer 而不是 DataContractSerializer。

到目前为止,我一直在使用这种方法 - http://www.pluralsight.com/community/blogs/aaron/archive/2006/04/21/22284.aspx - 这看起来很简单,但根据这个http:// social.msdn.microsoft.com/forums/en-US/wcf/thread/cb0c56c0-3016-4cda-a3c7-8826f8cc5bb0/方法不正确。

环顾四周,我发现了以下内容 - http://social.msdn.microsoft.com/forums/en-US/wcf/thread/f30ecd17-cac0-4cdc-8142-90b5f411936b/

基本上你需要运行以下命令:

所以这就是我在客户端所拥有的:

在服务器端:

问题是我使用的是 VS 生成的客户端服务代理和标准的 VS .svc 服务。所以我不控制客户端代理或服务的创建,上面的代码假设了这一点。

帖子中的一条评论提到您将能够实现“IServiceBehavior,另一个是 IClientBehavior”,但我不知道如何着手使用上述代码并进行更改。有人有什么想法吗???

干杯安东尼

0 投票
1 回答
1125 浏览

.net - 将属性序列化切换到 NetDataContractSerializer 的自定义属性

在 .NET 3.5 中,我想创建一个自定义属性(例如 [NetDataMember]),它将序列化行为DataContractSerializerNetDataContractSerializer.

基本上,对于A如下图所示的类

我想获得一个DataContractSerializer默认行为的序列化程序,但NetDataContractSerializer对于标有[NetDataMember].

知道如何设计一个可以实现这种行为的序列化程序吗?

0 投票
4 回答
15061 浏览

c# - C# DataContract 序列化,如何反序列化到已经存在的实例

我有一个类,它包含所有现有实例的静态字典,这些实例是在编译时定义的。

基本上它看起来像这样:

还有其他字段,类是派生出来的,不过这个问题没关系。

只有id是序列化的。当反序列化这种类型的实例时,我想获取已创建为静态字段(ABC的实例,Foo.Get(id)而不是获取新实例。

有没有一种简单的方法可以做到这一点?我没有找到任何我能够理解的资源。

0 投票
2 回答
206 浏览

.net - 我的 DataContract XML 中的所有这些空集合条目是什么?

有谁知道为什么 NetDataContractSerializer 可能会在序列化集合中添加“nil”条目?

例如,

请注意三个额外的“JobRecord”条目和附加元素“嘿,我知道这里有四个节点,但其中只有一个意味着什么”。

这似乎是一种奇怪的行为。好的,所以我可以看到 NDCS 深入到对象图中,并且可能正在使用一个大小大于被序列化的项目数的后备数组(想想列表的后备数组)。

这就是这里发生的事情吗?它是构造函数创建要处理的类的工件yield return(它是 JobRecord 的来源)吗?

0 投票
1 回答
284 浏览

.net-3.5 - 使用 NetDataContractSerializer 进行选择性序列化

序列化此类工作正常。但是,有时我想排除该字段。这可能吗?

暂时将字段设置为 null 是不可能的。

0 投票
1 回答
26 浏览

.net-3.5 - 有没有办法表明一个对象成功反序列化?

我正在使用NetDataContractSerializer. 成功反序列化对象后,有没有办法告诉对象完成其构造?我的思路是这样的:

0 投票
1 回答
792 浏览

f# - F# DataContractJsonSerializer StackOverflowException

是一个包含 50,000 条记录的列表(实际上更多,但让我们从小处开始)。我正在尝试序列化为 JSON 文件:

并且得到了臭名昭著的 StackOverflowException。准确地说:

FSharp.Core.dll 中出现“System.StackOverflowException”类型的未处理异常

有什么建议吗?

0 投票
5 回答
14583 浏览

wcf - 在具有消息安全性的 WCF 中使用 wsHttp 传输大量数据(序列化对象)

我有一个案例,我需要使用 WCF 使用 wsHttp传输大量序列化对象图(通过NetDataContractSerializer )。我正在使用消息安全,并希望继续这样做。使用此设置,我想传输序列化的对象图,它有时可能接近 300MB 左右,但是当我尝试这样做时,我开始看到 System.InsufficientMemoryException 类型的异常出现。

经过一番研究,默认情况下,在 WCF 中,服务调用的结果似乎包含在默认情况下包含在单个消息中,该消息包含序列化数据,并且默认情况下此数据在服务器上缓冲,直到整个消息被完全写入。因此,由于该缓冲区已满,服务器正在耗尽允许分配的内存资源,从而导致内存异常。我遇到的两个主要建议是使用流式处理或分块来解决这个问题,但是我不清楚这涉及到什么,以及在我当前的设置(wsHttp/NetDataContractSerializer/Message Security)下这两种解决方案是否可行。到目前为止,我知道使用流式消息安全性是行不通的,因为消息加密和解密需要对整个数据集而不是部分消息起作用。然而,分块听起来可能是可能的,但我不清楚如何使用我列出的其他约束来完成。如果有人可以就可用的解决方案以及如何实施它提供一些指导,我将不胜感激。

我应该补充一点,就我而言,我真的不担心与其他客户端的互操作性,因为我们拥有并控制通信的每一端,并使用共享接口模式将数据传输到任一端。因此,我对任何符合使用带有消息安全性的 wsHttp 来传输使用 NetDataContractSerializer 序列化的对象图的限制的想法持开放态度,我更喜欢不需要大幅更改现有服务和周围基础设施的解决方案。

相关资源:

我也对可以对这些数据进行的任何类型的压缩感兴趣,但是一旦我可以转换到 .NET 4.0 以便客户端将自动支持 gzip,我可能最好在传输级别执行此操作标题,如果我理解正确的话。

更新(2010-06-29):

关于我如何得出缓冲消息太大导致我的问题的结论的一些历史。最初我在测试时看到了下面的CommunicationException

基础连接已关闭:连接意外关闭。

最终,在运行此程序并进行更多日志记录后,我发现导致指定消息出现问题的底层InsufficientMemoryException异常。

未能分配 268435456 字节的托管内存缓冲区。可用内存量可能很低。

这源于以下方法。

System.ServiceModel.Diagnostics.Utility.AllocateByteArray(Int32 大小)

所以换句话说,失败来自分配数组。将序列化的相同数据写入磁盘时,它占用大约 146MB,如果我将其减半,那么我将停止收到错误,但是我没有深入研究破坏缓冲区的特定阈值以及它是否特定于我的系统或不是。

更新(2010-12-06):

我想此时我正在为以下内容寻找一些澄清。我的理解是,默认情况下,具有消息安全性的 WCF wsHttp 在将响应发送回客户端之前需要在服务器上缓冲整条消息(通常是我返回的整组数据),从而导致我的问题。

可能的解决方案:

  • 限制数据大小 - 通过使用某种形式的压缩、编码或限制使用某种类似分页的方法返回的实际数据,以避免消耗传出缓冲区的最大容量。
  • 流式传输 - 允许通过 WCF 以流式传输方式发送大量数据,但这与 wsHttp 或 MessageSecurity 不兼容,因为这些技术需要缓冲所有数据。
  • 分块通道 - 允许将数据分解为单独的消息,但此时我不确定这对服务合同设计的限制,以及我是否仍然可以将 wsHttp 与消息绑定一起使用。

限制我可以返回的数据只能在一定程度上起作用,并且与 Streaming 选项一样,这些选项需要对 WCF 服务调用之外的许多较低级别的工作进行编码。所以我想我需要知道的是,分块通道的任何可能实现是否可以通过允许将一组数据分解为服务器上的单独消息,然后在客户端上拼凑在一起,从而避开大消息问题这样我就不必更改现有服务合同的接口/形状,并且该过程几乎对每个服务实现的客户端和服务器部分隐藏,同时仍使用消息安全性和 wsHttp。如果分块通道将要求我重写我的服务合同以公开流,那么我不会' 看不出这与 Streaming 解决方案有何不同。如果有人可以简单地为我回答这些问题,我将奖励他们并将其标记为答案。

0 投票
2 回答
398 浏览

c# - 反序列化期间控制对象创建

我想使用 NetDataContractSerializer(或我猜的任何序列化器)来控制在反序列化期间通常不可序列化的类型的对象创建。使用自定义 SerializationBinder 我可以控制构造的类型,并使用自定义 ISurrogateSelector 和 ISerializationSurrogate 来控制如何在对象上设置状态。

我不能做的实际上是自己创建对象以允许使用依赖注入或其他东西。导致问题的对象位于对象图中,因此我无法在序列化之前对其进行编辑。

有没有办法让我的代码构造反序列化对象?

(作为背景,我正在编写基于 WF 示例中的 XmlWorkflowInstanceStore 的自定义 WF4 持久性实例存储。我想编写具有接口变量的工作流......并且不能直接构造具体类型。XmlWorkflowInstanceStore 是唯一的我可以找到自定义持久性的示例,它使用 NetDataContractSerializer 来序列化工作流状态。)

0 投票
1 回答
1584 浏览

c# - AppFabric 缓存和序列化 IQueryable 对象

我正在试验 AppFabric 缓存,但遇到了将检索到的数据保存在缓存中的问题。问题的根源在于,AppFabric 缓存似乎要求数据将 DataContract 和 Datamember 属性应用于正在保存的类。

如果是这种情况,那么我该如何保存(简化代码):

调用 Put 会导致此异常:

如何序列化 IQueryable 的结果,以便 AppFabric 可以缓存它?

谢谢,

瑞克