【发布时间】:2013-04-08 23:55:02
【问题描述】:
我正在创建一个 Web 服务,并且希望在返回数据方面更加优雅,而不是让消费者需要检查大量属性。
根据幕后生成的数据,我需要能够返回错误数据,或者消费者期望的数据。
我不想拥有一个大的平面对象,并在需要时填充属性并让用户检查“成功”标志,而是希望单个属性 Data 成为错误类的实例,或者一个成功类的实例。
这就是我想做的事情:
class ItemResponse
{
public bool Success { get; set; }
public T Data{ get; set; }
}
if( /*acceptance criteria*/ )
{
ItemResponse<SuccessData> resp = new ItemResponse<SuccessData>();
resp.Data = new SuccessData();
}
else
{
ItemResponse<ErrorData> resp = new ItemResponse<ErrorData>();
resp.Data = new ErrorData();
}
return resp;
public class SuccessData
{
}
public class ErrorData
{
}
然后让 web 方法返回具有通用属性的对象。
这可能吗?如果可以,鉴于必须正确输入 webmethod 返回类型,我该怎么做?
【问题讨论】:
-
您是否可以控制使用此服务的代码?你能流式传输结果吗?使用 JSON?
-
我不会成为消费者,不。结果需要保留为 xml。
-
Web 服务基本上是一个公开为 XML 的函数。由于一个函数不能有不同的类型,我不认为这是可以的。有一个具有一个属性的超类并有两个子类但不确定是否允许这样做会很有趣
-
我很确定我以前见过这种做法,但我没有任何代码可以参考或验证它是否符合我的想法。本质上,消费者检查了成功标志,然后根据值是什么来转换 Data 属性。
标签: c# web-services generics