Wcf、序列化、只读成员

标签 wcf serialization readonly

我正在学习 WCF,今天面临的挑战之一是实现此设计:

[DataContract]
public class MyOwnFaultException : FaultException<MyResult> 
{
   public MyOwnFaultException(MyResult result) : base(result) {}
}

[DataContract]
public class MyResult 
{
    readonly DefinedResults dres;

    public MyResult(DefinedResults res) {
        dres = res;
    }

    [DataMember]
    public DefinedResults DRes 
    {
        get { return this.dres; }
        //do not want to have the setter for this, but w.o it .net throws exception
    }
}

[DataContract]
public enum DefinedResults 
{ 
    Success = 0,
    Fail = 1,
}

服务

[OperationContract]
[FaultContract(typeof(MyOwnFaultException))]
void TestRemoteException();

因此,当我尝试创建对“错误”服务的引用时,我自然会收到“未设置 DRes 成员”异常,这是可以理解的。但是如何对用于结果指示器的值对象实现只读字段模式?

最佳答案

这是因为服务共享架构和契约,而不是类。

话虽如此,您可以通过以下方式破解它:

[DataMember]
public DefinedResults DRes 
{
    get { return this.dres; }
    private set { /* NOOP */ }
}

关于Wcf、序列化、只读成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752053/

相关文章:

c# - 在 C# 中声明一个 const double[]?

types - Decimal.MinValue & Decimal.MaxValue : why static readonly and not const modifiers?

c# - Entity Framework 在工作量大的情况下抛出意外异常

java - 使用值对象作为实体 ID 时自定义 Jackson 序列化

c# - 如何创建接受多个值并序列化为 WinForms Form.designer.cs 的 TypeConverter?

java - 在java中,如何检查方法m是否改变了它的接收者的状态

javascript - 如何在 Javascript 中使变量/对象只读?

c# - wcf 服务不工作 - 未能添加服务

c# - WebSocket WCF 传输绑定(bind)

wcf - 可怕的 "could not find a base address that matches scheme http"如何让它与 SSL 一起工作?