问题标签 [datacontract]

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 回答
91 浏览

wcf - Web 服务中的数据翻译效率低下

我已经编写 Web 服务大约一年了,我用来从数据库中获取数据一直显示给用户并再次返回的过程似乎效率低下。

这个问题的目的是确保我遵循最佳实践,而不仅仅是添加额外的工作。

这是从数据库到最终用户再返回的数据路径。

  1. 服务将其从数据库中获取到数据访问层 (DAL) 对象中。
  2. Service 将其转换为 DataContract 以发送给客户端。
  3. 客户端获取 DataContract 并将其转换为客户端对象
  4. 客户端显示对象/用户进行更改/添加对象
  5. 客户端将客户端对象转换为 DataContact 并将其发送到服务
  6. 服务接收 DataContract 并将其转换为数据访问层对象。
  7. 服务使用更改/新对象更新数据库。

如果您正在跟踪对象被转换 4 次 (DAL->Contract->Client Object->Contract->DAL)。当您的应用开始扩展其数据时,这似乎是很多转换。

这是做到这一点的“最佳”方式吗?我错过了什么吗?

万一这很重要,我正在使用 Visual Studio 2008、WCF、LinqToSQL 和 Windows Mobile 5.0 (NETCF)。

0 投票
4 回答
5267 浏览

c# - 克隆整个对象图

使用此代码序列化对象时:

我注意到它不会复制关系。有没有办法做到这一点?

0 投票
2 回答
215 浏览

wcf - Web 服务数据类型(合同)

我有一个一般的设计问题。

我们有一个相当大的数据模型来表示一个临床对象,该对象本身在层次结构中有 200 多个子属性。

我们有一个 SetObject 操作和一个 GetObject 操作。我的问题是,在最佳实践方面,在两个操作中使用单个数据模型或为每个操作使用不同的数据模型是否有意义?因为 Get 操作将返回比 Set 所需的更多的详细信息。

我的意思的一个例子:数据模型有说 ProviderId 和 ProviderName 属性,在 Get 操作中,ProviderId 和 ProviderName 都需要返回。但是,在 Set 操作中,只需要 ProviderId,并且 ProviderName 被服务忽略,因为系统已经有了该信息。在这种情况下,如果 Get 和 Set 操作使用相同的数据模型,即使 Set 操作也会暴露 ProviderName,这是否会使消费开发人员感到困惑?

0 投票
3 回答
7742 浏览

c# - 在 WCF 中使用自定义 DataContractResolver 来传输涉及泛型的继承树

我有一个 WCF 服务,其中有接受非泛型基类作为参数的操作。

这个基类又被泛型类继承,例如

为了让它工作,我以前必须为 Foo 类注册 KnownTypes,并让这些包括所有可能的 Bar 变体(例如Bar<string>Bar<int>甚至Bar<List<string>>)。

但是,使用 .NET 4 中的 DataContractResolver,我应该能够构建一个正确存储(和恢复)类的解析器。

我的问题:

  1. DataContractResolvers 通常只在服务端使用,而不是由客户端使用?如果是这样,在这种情况下这将如何有用?

  2. 编写一个序列化泛型类型的完全限定类型名称的 DataContractResolver 我错了吗,例如Bar`1[List`1[string, mscorlib], mscorlib]?客户端上的同一个 DataContractResolver 不能恢复这些类型吗?

0 投票
3 回答
12740 浏览

c# - 为什么我不能在同一个类上使用 WCF DataContract 和 ISerializable?

我有一个类,我需要能够序列化为 SQLServer 会话变量并可以通过 WCF 服务使用。我已经声明如下

但是当我尝试调用此服务时,我在跟踪日志中收到以下错误。

“System.Runtime.Serialization.InvalidDataContractException:类型 'BarProxybcb100e8617f40ceaa832fe4bb94533c' 不能是 ISerializable 并且具有 DataContractAttribute 属性。”

如果我取出 Serializable 属性,WCF 服务可以工作,但是当对象无法序列化到会话时。如果我从类 Bar 中删除 DataContract 属性,WCF 服务会失败说

输入数据合同名称为“BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/ ”的“BarProxy3bb05a31167f4ba492909ec941a54533”是不应该的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中

我尝试将 KnownType 属性添加到 foo 类

但我仍然得到同样的错误。

谁能帮我解决这个问题?

非常感谢

戴夫

0 投票
1 回答
3085 浏览

wcf - WCF - (自定义)二进制序列化

我希望能够通过 Web 查询我的数据库,并且我希望使用 WCF 服务来处理请求和结果。问题在于,由于这些查询可能返回的数据量很大,我担心这些结果将如何通过网络进行序列化。例如,我可以想象 XML 序列化看起来像:

以及包含类型名称和其他(不必要的)元数据的二进制序列化。甚至可能是集合中每个元素的类型名称?o_o

理想情况下,我想自己执行某些“DataContract”的序列化,这样我就可以使它变得超级紧凑。有谁知道这是否可能,或者任何解释如何使用 WCF 进行自定义序列化的文章?

提前致谢

0 投票
8 回答
18218 浏览

.net - 具有只读属性的 WCF DataContract

我试图从 WCF 中的服务方法返回一个复杂类型。我正在使用 C# 和 .NET 4。这种复杂类型是不变的(与 .net 字符串相同)。此外,服务只返回它,而不会将它作为参数接收。

如果我尝试仅在属性上定义 getter,则会出现运行时错误。我猜这是因为没有设置器会导致序列化失败。不过,我认为这种类型应该是不变的。

例子:

由于序列化问题,服务无法加载。

有没有办法在 WCF DataContract 上创建只读属性?也许通过更换序列化程序?如果是这样,怎么做?如果不是,您对这个问题有什么建议?

谢谢,
阿萨夫

0 投票
2 回答
9361 浏览

wcf - 客户端 WCF DataContract 具有来自服务的空/空值

我有一个简单的 WCF 服务,它从服务器返回时间。我已通过与 Fiddler 核对确认正在发送数据。这是我的服务发送的结果对象 xml。

因此,据我所知,服务器端没有任何问题。它正在接收请求并返回结果。

但在我的 silverlight 客户端上,返回对象的所有成员要么为空,要么为空白或默认值。如您所见,服务器返回当前日期和时间。但在 silverlight 中,我的对象的 Time 属性设置为 1/1/0001 12:00 AM(默认值)。

Sooo 我认为服务器和 silverlight 客户端之间的 DataContracts 不匹配。这是服务器的 DataContract

难以置信的简单。这是我的 silverlight 客户端上的数据合同。

从字面上看,唯一的区别是应用程序中的命名空间。但返回的值仍然是 null、空或 .NET 默认值。

谢谢你的帮助!

更新

这是我的所有服务都运行的 ClientBase。我在这里阅读了一篇出色的文章来构建它。

这是我的界面

现在我有了我的服务类,它使用这个接口通过我的 BaseService 类进行调用。

最后,这里是实际调用所有内容并完成工作的代码。

唷....我希望没有人会因为我发布的所有这些代码而迷失:P

0 投票
1 回答
722 浏览

c# - DataContractJsonSerializer 生成哈希列表而不是哈希

我希望有一个 Dictionary 形式的对象:

以以下形式序列化为 JSON:

不是

序列化集合的一般尝试似乎是一个怪物的原因是什么?

DataContractJsonSerializer 使用 ISerializable 接口来生成这个东西。在我看来,好像有人从 ISerializable 中获取了 XML 输出,并把它弄坏了。

有没有办法覆盖 .Net 在这里使用的默认序列化?我可以从 Dictionary 派生并覆盖序列化方法吗?

发布以听取人们可能提出的任何警告或建议。

0 投票
3 回答
9599 浏览

c# - 有没有办法从 DataContract 导出 XSD 架构

我正在使用 DataContractSerializer 将我的类序列化/反序列化到 XML。一切正常,但在某些时候,我想为这些 XML 文件的格式建立一个独立于实际代码的标准模式。这样,如果序列化过程中出现问题,我总是可以返回并检查标准模式应该是什么。或者,如果我确实需要修改架构,那么修改是一个明确的决定,而不是修改我的代码的后期影响。

此外,其他人可能正在编写其他可能不是基于 .NET 的软件,这些软件需要从这些 XML 文件中读取。我希望能够为他们提供某种模式文档。

DataContract 和 XSD 架构之间是否存在某种关系。有没有办法将类中的 DataContract 属性导出为 XSD 模式?