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

.net - 使用自定义 ISerializationSurrogate 时如何序列化嵌套集合?

我正在尝试使用通用序列化代理来控制通过使用 NetDataContractSerializer 进行序列化的字段的命名。到目前为止,这个概念运行良好,除了每当我遇到一个在 GetObjectData 方法中保存对集合的引用的字段时,我都会遇到一个问题在被序列化的集合中。对于数组或列表等集合,我需要做些什么特别的事情吗?

我添加了我的完整代码的副本以及下面的示例,希望有人能够指出我正确的方向。

如果有人好奇,我尝试这种技术的原因是为了解决一个导致内部处理的 XmlException 的问题,该问题让我担心性能影响。

0 投票
2 回答
306 浏览

.net - `Serializable` 对象的更快序列化

我们的客户端/服务器应用程序使用 aNetDataContractSerializer来序列化任意Serializable对象。

的输出BinaryFormatter会稍微小一些,但性能并不是真的更好

现在更小的表示是可能的(例如,XmlSerializerand DataContractSerializer、Json、Protocol Buffers、Thrift 等的输出),这也恰好可以更快地序列化和反序列化。

然而,为了使用那些我必须去每一个Serializable类并添加属性并可能更改字段的访问级别等。这些类不仅分布在许多不同的内部项目中,而且我们的客户也有自己的带有Serializable必须修改的类的 dll 。换言之,一项重大事业。

对象是否有任何其他性能改进和潜在的尺寸减小(除了 gzipping 等)Serializable

0 投票
1 回答
632 浏览

c# - 'NetDataContractSerializer 不支持使用类型 ..' - 为什么使用 NetDataContractSerializer?

出现此错误是因为正在使用 NetDataContractSerializer (NetDCS),但引用程序集未共享并包含在客户端中。这个问题与此无关。

这个问题是关于防止使用 NetDataContractSerializer;或者至少找出客户使用它的原因。

  • 为什么客户端在我没有配置的情况下使用 NetDCS?

    根据我发现的文章/帖子,这是一个明确的步骤;我没有为项目或 WCF 客户端手动启用此功能 - 是否有机器/框架覆盖在某处击败我?

  • 我可以强制客户端使用普通的DataContractSerializer (DCS) 吗?

    如果是这样,我可以在每个类型或每个命名空间的基础上强制执行此操作吗?通用框架“基本类型”已经在引用的程序集中;理想情况下,我可以通过 NetDCS 继续解决这些问题——但我会完全放弃 NetDCS 来“解决”这个问题。

    如果没有,是否有任何更激烈的措施可用,例如修改响应/响应 XML?

    (我可以手动添加任何所需的合同解析器并处理损坏的生成名称。)

使用 WCF 测试客户端(总是使用 DCS?)“工作正常”,这让我相信当前问题与使用项目服务时发生的 NetDCS 反序列化有关。我可能误解了 WCF 测试客户端的工作原理。

这是错误消息(可以通过添加 NetDCS 的参考程序集来解决,但我不想这样做)以确保我没有误解这个问题。我 95% 确定这是在客户端的反序列化上。

格式化程序在尝试反序列化消息时抛出异常..

NetDataContractSerializer不支持将类型 '..' 用作 get-only 集合。考虑使用 CollectionDataContractAttribute 属性或 SerializableAttribute 属性标记类型,或向属性添加设置器。

堆栈摘要:

WCF 客户端配置是“简单”的默认配置,并且没有在运行时修改行为的代码。

服务参考是在 VS 2013 中生成的,项目针对 .NET 4。具有服务参考的项目和测试项目都是简单的类库 - 即。它们不托管在 IIS 中。

0 投票
2 回答
1068 浏览

c# - 使用 NetDataContractSerializer 将 Guid 传递给 WCF 服务

我已经创建了合同

这里NetDataContractAttribute描述的属性。当我打电话时,我收到一个错误:PassGuid

附加信息:格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:id时出错。InnerException 消息是“XML 元素”“ http://tempuri.org/:id ”不包含预期的属性“ http://schemas.microsoft.com/2003/10/Serialization/:Type ”。反序列化器不知道要反序列化哪种类型。检查被序列化的类型是否与被反序列化的类型具有相同的合同。有关更多详细信息,请参阅 InnerException。

但是PassInt可以毫无错误地调用。

完整的源代码在这里

编辑:这个问题不是关于发送 guid 的效率,比如这个,它主要是关于使用 NetDataContractSerializer。

0 投票
1 回答
507 浏览

c# - 具有新属性的 NetDataContractSerializer 反序列化

由于缺乏任何真正的远见,我使用 NetDataContractSerializer 序列化了大量仅使用 Serializable 修饰的数据,现在我想添加一个新字段。我有哪些选择?

原始类看起来像这样(具有几个继承级别和相当多的字段):

现在我想添加另一个属性,比如:

现在,当我更新类并进行反序列化时,我收到一个异常,因为新字段不存在,例如:

好的,这是有道理的,因为 NetDataContractSerializer 需要相同的类。我可以使用 DataMember 属性来解决这个问题,例如:

那么问题是切换到 DataMember(正如我应该预先做的那样,或者使用不同的序列化程序)会改变隐式的字母顺序,然后我的大部分字段将不会像众所周知的那样默默地反序列化。

我试图手动添加与磁盘上的排序一致的排序(通过Order属性上的属性),但这似乎也没有得到尊重。(我也没有在原始 xml 中看到可以匹配的订单值。)

除了写一些东西来加载 xml 并插入丢失的节点之外,还有其他选择吗?(或者等效地设置一个并行类型并从一个重新序列化到另一个反序列化?)如果没有,我可能只是加载当前类型并反序列化到 JsonNet 或 protobuf,但我是否缺少使用 DataMember/ 更直接的东西ETC?

0 投票
1 回答
25 浏览

netdatacontractserializer - 当网络连接打开时,自动显示吐司

我想创建一个应用程序。如果数据连接已打开,则自动显示 toast。否则不显示。我创建了很多应用程序,但我不知道如何制作。我试试这个但不工作。

公共类 MainActivity 扩展 Activity {

}

0 投票
1 回答
638 浏览

c# - 使用 Datacontracts 进行空字符串序列化

我有我能想到的最通用的序列化示例:一个有两个变量和一个实例的类,我想序列化。但是我有一个问题,下面的代码总是给我一个空字符串。我想不出为什么会这样..

0 投票
2 回答
232 浏览

c# - 如何使用 NetDataContractSerializer 序列化从 ConfigurationSection 派生的类型

我编写了派生自ConfigurationSection标记所有属性DataMember和类的类型DataContract,但是程序崩溃表明我无法从未标记的类型继承我的类型DataContract

那么我该如何使用这个序列化程序ConfigurationSection呢?

0 投票
1 回答
58 浏览

c# - 在不使用 DataContractAttribute 的情况下在 NetDataContractSerializer 中强制排序

我想强制按NetDataContractSerializer特定顺序写入属性值,因为序列化程序按字母顺序写入它们。

我知道我可以通过向[DataMember(Order = X)]这些属性添加属性来实现这一点,但这仅在我[DataContract]向要序列化的类添加属性时才有效。

不幸的是,我无法将[DataContract]属性添加到此类,因为它的基类没有。

还有另一种强制命令的方法吗?

0 投票
1 回答
531 浏览

vb.net - VB.Net WCF 将类数组作为参数传递给客户端

我在服务器端和客户端有一个 WCF 单通道实现。我在服务器端有一个自定义类,我试图传递给客户端。我正在尝试将自定义类的数组(集合)传递给客户端。

以下是我拥有的代码实现示例。

服务器端类结构:

WCF 数据合同:

WCF 契约和类定义:

WCF 服务器端实现:

当我将以下结构从服务器端发送到客户端时,我收到以下错误。“接收对http://localhost/xyz的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)。有关更多详细信息,请参阅服务器日志。”

请让我知道问题发生在哪里。我如何成功地将一组类引用作为参数发送到客户端?任何帮助,将不胜感激。