gpt4 book ai didi

c# - WCF 以外的项目中的 DataContract

转载 作者:行者123 更新时间:2023-11-30 22:10:21 26 4
gpt4 key购买 nike

我一直在为我的项目开发一个WCF服务。我的解决方案中有多个项目,解释如下:

  1. WCF 服务 - WCF 服务项目
  2. 业务逻辑 - 项目包含领域逻辑
  3. 数据访问层 - 用于访问数据
  4. 核心 - 项目仅包含业务对象(其中许多作为服务调用的响应发送 - 其中包含要与客户共享的类)
  5. Log - project 记录错误和事件

服务项目为相应的操作调用业务项目,业务逻辑项目初始化核心对象中定义的类的对象。这些对象作为服务调用的响应发送。

这是成功完成的,我能够共享核心项目中定义的类的所有公共(public)属性。但我无法在核心项目中使用 DataContract/DataMember 属性,因为这是一个非 WCF 项目。我需要完成一些必须使用 DataMember 属性的任务,比如我不想在空值的情况下共享属性,我不想与客户端共享某些对象的一些属性。

如果我对这种方法有误,请告诉我。请帮助我实现上述目标,我在论坛上找不到任何类似的问题。

编辑:(让我试着更好地解释一下)

所有项目都在使用这些项目的 WCF 服务项目中引用。这是为了保持逻辑分离。

例如,Core 项目包含一个名为 User 的类,该类是服务 api 的返回类型。调用此 API 时,逻辑会初始化 User 的对象。该对象作为该调用的结果返回。

在这种情况下,我没有为 User 类使用任何 [DataContract] 属性。它工作正常。现在我想停止共享此类的一些属性,为此我需要使用 [DataContract]/[DataMember] 属性,这些属性在 Core 项目中没有得到解决.

最佳答案

好的,首先让我指出数据协定和数据成员与 WCF 没有直接关系。实际上,这些属性驻留在与服务直接无关的命名空间中...它们与序列化相关,只是添加对所需程序集的引用...我认为它是 System.Runtime。序列化。我不明白为什么不能在项目中添加对此程序集的引用。

第二个问题与“隐藏”成员有关……我认为您在这里没有太多选择。如果您使用 DataMember 属性修饰一个属性,它将使用数据协定进行序列化,因此您无法“隐藏”它。充其量,你能做的就是不要用 DataMember 属性来装饰一个属性,但在这种情况下,该属性将不会被序列化,换句话说,它会在序列化过程中被忽略。

关于c# - WCF 以外的项目中的 DataContract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20854263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com