gpt4 book ai didi

.net - WCF:公开未设置的只读 DataMember 属性?

转载 作者:行者123 更新时间:2023-12-03 05:44:34 27 4
gpt4 key购买 nike

我有一个服务器端类,我通过 [DataContract] 在客户端上提供该类。这个类有一个只读字段,我想通过属性提供该字段。但是,我无法这样做,因为似乎不允许我在没有 get 和 set 的情况下添加 [DataMember] 属性。

那么 - 有没有办法在没有 setter 的情况下拥有 [DataMember] 属性?

[DataContract]
class SomeClass
{
private readonly int _id;

public SomeClass() { .. }

[DataMember]
public int Id { get { return _id; } }

[DataMember]
public string SomeString { get; set; }
}

或者解决方案将使用 [DataMember] 作为字段 - (如所示的 here )?也尝试这样做,但它似乎并不关心该字段是只读的..?

编辑:是通过像这样破解它来创建只读属性的唯一方法吗? (不 - 我不想这样做...)

[DataMember]
public int Id
{
get { return _id; }
private set { /* NOOP */ }
}

最佳答案

你的“服务器端”类不会对客户端“可用”,真的。

发生的情况是这样的:根据数据契约,客户端将从服务的 XML 模式创建一个新的单独类。它不能使用服务器端类本身!

它将根据 XML 架构定义重新创建一个新类,但该架构不包含任何 .NET 特定内容,例如可见性或访问修饰符 - 毕竟它只是一个 XML 架构。客户端类将以这样的方式创建,即它在线路上具有相同的“足迹” - 例如它基本上序列化为相同的 XML 格式。

无法通过标准的基于 SOAP 的服务“传输”有关该类的 .NET 特定知识 - 毕竟,您传递的只是序列化消息 - 没有课!

检查“SOA 的四个原则”(由 Microsoft 的 Don Box 定义):

  1. 界限明确
  2. 服务是自主的
  3. 服务共享架构和契约,而不是类
  4. 兼容性基于政策

参见第 3 点 - 服务共享架构和契约,共享类 - 您只共享数据契约的接口(interface)和 XML 架构 - 仅此而已 - 没有 .NET 类。

关于.net - WCF:公开未设置的只读 DataMember 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873741/

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