类型不能是ISerializable并且具有DataContractAttribute属性

本文关键字:DataContractAttribute 属性 不能 ISerializable 类型 | 更新日期: 2023-09-27 17:58:46

我得到一个
Type 'WcfServiceLibrary1.GetDataErrorException' cannot be ISerializable and have DataContractAttribute attribute.

尝试在WCF服务中添加自定义异常时。

 [ServiceContract]
public interface IService1 {
    [OperationContract]
    [FaultContract(typeof(GetDataErrorException))]
    string GetData(int value);
}
public class Service1 : IService1 {
    public string GetData(int value) {
        if (value.Equals(0))
            throw new FaultException<GetDataError>(new GetDataError(), new FaultReason("Zero"));
        return string.Format("You entered: {0}", value);
    }
}
[DataContract]
public class GetDataError {
    public GetDataError() { }
}
[DataContract]
public class GetDataErrorException : FaultException<GetDataError> {
    public GetDataErrorException(string message) :
        base(new GetDataError(), new FaultReason(message)) { }
}

为什么这不起作用?我想我错过了一些简单的事情。。。

类型不能是ISerializable并且具有DataContractAttribute属性

您不能也不应该同时拥有这两者。从你得到的例外中可以明显看出。当框架看到2个序列化程序时,它会看到一个不明确的状态。有关更多信息,请参阅以下博客

http://blogs.msdn.com/b/sowmy/archive/2006/05/14/597476.aspx

你的故障合同应该看起来像

public class DataErrorException : FaultException<GetDataError> 
{
    public DataErrorException(string message) :
            base(new GetDataError(), new FaultReason(message)) { }
}

注意,这里唯一的变化是我删除了DataContract属性

我在msdn faultexception示例中使用了这个示例,它对我很有效。

相关文章:
  • 没有找到相关文章