问题标签 [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.
.net - Which list/collection type is best to use in a WCF data contract?
When defining a WCF data contract, which type should one use for collections/lists?
- Should it be ICollection<T>, IList<T>, T[] or...?
- Should I use interface types or the concrete types?
- What trade offs are there to consider?
wcf - 影响客户端的 WCF 合同更改
我很好奇是否有人可以概述服务器端哪些类型的 WCF 合同(接口)更改会破坏客户端尝试发送消息,以及为什么。我相信 WCF 可以处理某些差异,但我不确定您可以安全地更改哪些内容,以及您不能安全更改哪些内容。
- 从 OperationContract 添加/删除参数?
- 添加/删除/更改 DataContract 的序列化属性?
- 从 ServiceContract 添加/删除 OperationContracts?
有朋友在这里问过类似的问题:
向 WCF ServiceContract 添加方法会破坏现有客户端吗?
编辑:正如 John Saunders 所指出的,更改合同通常不是一个好主意,但有些内置的东西允许一些版本容差(ExtensionDataObject 等?)。我只想知道版本容差有多灵活。
wcf - 如何使用 WCF 发送复杂对象?它有效吗?好吗?
我可以有这种形状的数据合同吗?
我在这里假设 MonthlyStatistic 类也需要是 DataContract。您可以在 Web 服务中执行此操作吗?
c# - 树结构的序列化/反序列化
我试图找出保存(序列化)然后打开(反序列化)树结构的最佳方法。我的结构由具有不同属性的各种对象类型组成,但每个对象类型都继承自一个基本的抽象“节点”类。
每个节点都有唯一的 ID (GUID),并有一个 AddSuperNode(Node nd) 方法来设置节点的父节点。这反过来又调用了其他方法,允许父节点知道它有哪些子节点。但是,一些节点也使用AddAuxSuperNode()方法将次父节点添加到节点。
我使用的是二进制序列化,但现在我想我想使用一些我有更多控制权的东西,并且序列化的数据更容易访问。我还想在反序列化时保留类型信息,并能够序列化私有值。所以DataContractSerializer似乎是最好的方法。
我不能直接序列化根节点,因为节点有多个父节点。我不想创建重复的对象。所以看起来我需要将树解构为一个平面列表,然后将其序列化。然后在序列化该列表之后重建树。这听起来对吗?
就像我之前所说的,每个节点都有一个唯一的 GUID 标识符,但是现在节点直接引用它们的父/子,并且不存储它们的 id。除了直接引用之外,我还可以更新AddSuperNode()和AddAuxSuperNode()方法来更新要序列化的父 ID 列表。但我宁愿只在对象被序列化时更新/创建这个列表。所以我正在考虑在节点中创建一个UpdateSuperNodeIDRefs()方法,该方法将在序列化之前被调用。
以下是我打算为这个结构的序列化和反序列化做的事情。谁能建议一种更好/更清洁/更有效的方法来做到这一点?
序列化
1)提供树结构的根节点
2) 将树结构分解为一个平面Dictionary(Guid id,Node nd),其中id是nd的guid。
3) 调用UpdateSuperNodeIDRefs();为每个节点更新它为其父节点保存的 ID。
4)使用DataContractSerializer序列化节点字典
反序列化
1)反序列化节点字典
2)遍历Dictionary中的每个节点,将每个节点重新连接到它们的父节点。对于存储的任何父 ID ,在字典中找到具有匹配 ID的相应节点,调用AddSuperNode()或AddAuxSuperNode()以将节点重新连接到其父节点
3)从字典中的任何节点找到结构的根
4)返回根节点
.net - 部分信任场景中 DataContracts 中的集合
在设计用于序列化的 DataContracts 时,我一直很困惑。
假设我有一个对象(例如客户),它公开了一个集合属性(例如一个名为 Addresses 的 AddressCollection)。框架设计指南规定我不应该公开该属性的公共 mutator,即,集合属性应该有一个 get 和没有 set,而是一个公共 set 方法(public void SetAddresses(IEnumerable<Address>addresses))。
但是,如果我想序列化该对象,并且我预计我将处于部分信任环境中,我是否必须向该属性添加一个公共设置器以便它可以正确反序列化?
此外,如果集合在序列化时没有任何内容,并且由于 DataContractSerializer 没有调用默认构造函数,我很确定该集合根本没有设置并且保留为空。我可以使用 OnSerializing 属性来初始化集合,但是在部分信任的情况下,该方法也必须是公共的,不是吗?这更难看。
有谁知道这里的适当指导?
非常感谢。
wcf - 从 DataContract.Namespace 解析 CLR 类型?
我是 WCF 的新手白带。
我有一个命名空间:http: //schemas.datacontract.org/2004/07/System/ArgumentException。
我正在寻找该字符串并将其转换为 CLR 类型,以便最终得到 typeof(ArgumentException)。
这可能吗?:)
谢谢你,迈克尔D
wcf - 使用 WCF 从类库中公开对象
我正在使用一个公开一些对象的类库。这些对象有几个属性来保存我的客户需要的数据。我想创建一个将对象返回给我的客户的 WCF 服务,但我无法更新类库以添加 DataContract 和 DataMember 属性。暴露这些对象的最简单方法是什么?
wcf - 空值与未设置值
我们编写了一个 Web 服务,它使用一个简单的实体转换器将 DTO 的值映射回“真实的”服务器端业务对象。作为本次练习的一部分。我们遇到了显式设置空值和未设置值的客户端之间的“有趣”区别。
问题本质上是,如果客户端没有显式设置值,我们想在实际业务对象上设置默认值,但是使用标准的可空类型无法判断客户端是否明确表示“将其设置为 null ” 。或者只是不设置它。
这里的解决方案显然是某种“标志”。
在业务对象中,我们可以使用在属性设置器中设置的私有“IsDirty”标志在内部跟踪字段的状态,但是 DTO 只真正指定了一个接口,因此这意味着将这些数据公开给公众。这留下了许多实现选项。语言是 C#(所以是静态类型的)所以...
- 我们可以在每个属性上公开一个“IsSet”标志吗?
- 我们可以将每个属性公开为具有 .Value 和 .IsSet 属性的类吗?等等等等
您将如何选择在数据合约上公开这些“标志”?您在这里认为最佳实践是什么?
对此的任何意见将不胜感激。
c# - WCF 中的 DataContract 问题
假设我有一个方法并且返回类型是枚举,我的问题是我应该将枚举声明为 DataContract 吗?
样例中,OrderStatus 是一个枚举数据类型,
我应该将 OrderStatus 枚举类型声明为 DataContract 吗?
提前谢谢,乔治
wcf - WCF 数据协定和参考实体数据?
征求有关“最佳”模式的反馈/选项/评论,以用于我的服务中的参考数据。
参考数据是什么意思?
让我们以罗斯文为例。订单与数据库中的客户相关。当我实现我的订单服务时,在某些情况下,我希望引用来自订单的“完整”客户,而在其他情况下,我只想引用客户(例如键/值对)。
例如,如果我正在执行 GetAllOrders(),我不想返回一个完全填写的订单,我想返回一个订单的轻量级版本,每个订单的客户只有参考数据。但是,如果我执行 GetOrder() 方法,我可能想要填写客户详细信息,因为此方法的使用者可能需要它。在其他情况下,我可能想要求在某些方法调用期间填写客户详细信息,但留给其他人。
这是我想出的:
这里的想法是,由于在 CustomerDTO 中始终需要 ReferenceInfo(这是一个通用的键/值对),因此我将始终拥有 ReferenceInfo。它为我提供了足够的信息,以便稍后在需要时获取客户详细信息。让 CustomerDTO 需要 ReferenceInfo 的缺点是,当我获得完整的 CustomerDTO(即填写了 CustomerInfo)时,它可能有点过头了,但至少我可以保证参考信息。
是否有一些其他的模式或框架可以用来使这个场景/实现“更干净”?
我问的原因是,虽然我们可以简单地说在 Northwind 中总是返回一个完整的 CustomerDTO,但这在简单的 Northwind 情况下可能工作得很好。就我而言,我有一个具有 25-50 个字段的对象,这些字段是引用/查找类型的数据。在不同的情况下,有些比其他的加载更重要,但我希望这些引用类型的定义尽可能少(这样我就不会陷入“DTO 维护地狱”)。
意见?反馈?注释?
谢谢!