我的情况是这样的。在每次调用我的 Web 服务时,我都有一个 out 参数,它是一个错误对象。如果没有错误,则对象通过为空来指示。如果出现错误,则会填充不同的属性,例如“HasError”字段、“ErrorMessage”、“PrettyMessage”等。我现在尝试做的是创建不同类型的错误对象,它们都实现了错误我已经定义的接口。然后,我希望能够使 out 参数类似于“out IMyError 错误”,然后能够将该错误对象设置为该接口的一个实现,具体取决于我在方法中遇到的错误类型。我遇到的问题是序列化似乎不喜欢这样。该方法运行良好,但我没有 无法在客户端取回任何数据。这是一些希望澄清的代码。
我的界面
public interface IMyError
{
bool HasError { get; set; }
string ErrorType { get; set; }
string PrettyErrMsg { get; set; }
}
示例类实现
[Serializable]
[DataContract]
public class AspError : IMyError
{
public AspError(Exception exception)
{
this.HasError = true;
this.PrettyErrMsg = "An ASP Exception was thrown";
this.ExceptionMsg = exception.Message;
this.StackTrace = exception.StackTrace;
}
[DataMember(Name = "has_error", IsRequired = true)]
public bool HasError { get; set; }
[DataMember(Name = "error_type", IsRequired = true)]
public string ErrorType
{
get
{
return "ASP";
}
set
{
}
}
[DataMember(Name = "pretty_error", IsRequired = true)]
public string PrettyErrMsg { get; set; }
[DataMember(Name = "exception", IsRequired = true)]
public string ExceptionMsg { get; set; }
[DataMember(Name = "stack_trace", IsRequired = true)]
public string StackTrace { get; set; }
}
以及我的 WCF 服务中的方法
public bool MyMethod(out IMyError error)
{
error = new MyError() { HasError = false };
try
{
// do some code
}
catch (Exception exception)
{
error = new AspError(exception);
return false;
}
}
我想要的是该方法,当捕获到异常时,返回一个格式为 json 的 AspError,就像它在我尝试将其作为接口之前的工作方式一样。或者,如果发生不同的 IMyError 实现类,则返回格式为 json 的 THAT 类型。我认为它可以工作,因为它们都是 IMyError 类。