如何强制wcf服务序列化一个类

时间:2017-01-26 11:19:08

标签: c# rest wcf

我正在创建一个WCF服务并通过抛出WebFaultException<MyResultClass>来处理错误。 (MyResultClass)是我项目中的一个类:

[DataContract]
    public class MyResultClass
    {
        [DataMember(IsRequired = false)]
        public int Code;
        [DataMember(IsRequired = false)]
        public string Description;
        public MyResultClass()
        {

        }

    }

问题是WCF服务没有序列化这个类。

2 个答案:

答案 0 :(得分:2)

首先(正如其他人提到的)你应该使用属性。

[DataContract]
public class MyResultClass
{
    [DataMember]
    public int Code { set; get; }
    [DataMember]
    public string Description { set; get; }
}

此外,您需要在界面中指定FaultContract。否则客户无法知道会发生什么。由于WebFaultException继承自FaultException,因此您无需指定它。

[ServiceContract]
public interface IService:
{
    [OperationContract]
    [FaultContract(typeof(MyResultClass))]
    void DoStuff();
}

你的实施:

public class Service : IService
{
    public void DoStuff()
    {
        var detail = new MyResultClass
        {
            Code = 400,
            Description = "foo"
        };
        throw new WebFaultException<MyResultClass>(detail, HttpStatusCode.BadRequest);
    }
}

和你的客户:

try
{
    // Call your WCF service here...
}
catch (FaultException<MyResultClass> e)
{
    MyResultClass detail = e.Detail;
    // Do stuff with detail
}
catch (Exception e)
{
    // Some other error
}

答案 1 :(得分:0)

请将您的课程更改为此并尝试:

[DataContract]
public class MyResultClass
{
    [DataMember]
    public int Code { set; get; }
    [DataMember]
    public string Description { set; get; }

}