C# 如何设计包含Web服务结果的类
问题 我调用不同的webservices,它们返回json字符串。我将这些字符串解析为自定义对象,并将它们保存在名为APIResult的“结果类”中。例如,一个Web服务返回列表OBJ1,另一个返回OBJ2,有时还返回两个或多个对象。结果类将返回给使用对象和一个布尔值(指示请求是否成功)调用它的方法 这是可行的,但当我不得不调用许多不同的Web服务时,类会变得丑陋。现在我有7个属性,比如OBJ1、OBJ2、List、List等等。为了避免向APIResult类添加更多属性,我想重新设计它,使其更加灵活,但我不确定什么是最好的方法 想法 仿制药似乎是个好主意。我可以用新的APIResult(ObjectType)初始化我的类,然后使用一个或多个属性T Data1。拥有三个属性T Data1、T Data2、T Data3仍然有点难看。我也不确定是否可以在不进行反射的情况下将对象从json解析为泛型类型,以及这是否会减慢速度C# 如何设计包含Web服务结果的类,c#,json,web-services,api,architecture,C#,Json,Web Services,Api,Architecture,问题 我调用不同的webservices,它们返回json字符串。我将这些字符串解析为自定义对象,并将它们保存在名为APIResult的“结果类”中。例如,一个Web服务返回列表OBJ1,另一个返回OBJ2,有时还返回两个或多个对象。结果类将返回给使用对象和一个布尔值(指示请求是否成功)调用它的方法 这是可行的,但当我不得不调用许多不同的Web服务时,类会变得丑陋。现在我有7个属性,比如OBJ1、OBJ2、List、List等等。为了避免向APIResult类添加更多属性,我想重新设计它,使其更
你有什么建议吗?
这里很少有需要考虑的事情。
- 你需要一门APIRESS课程吗?你打算用它做什么?如果您有一个记录良好的restapi(比如odataapi),那么响应将得到很好的描述,您可以验证您得到的响应是您所需要的。否则,如果不匹配,你会怎么做 <> >如果你只是把它解析成你的模型,你甚至可以考虑通用的项目来保持你的反应。然后可以检查此作业对象的属性/子对象。您甚至可以将其传递到(newtonsoft)json序列化程序中,并让调用方法说明它应该是什么样子
- 您的回复的商业意义是什么?结果总是一个硬名称。然而,如果您有诸如FirstName、LastName、AddressList等属性,那么它会变得更好
public class ApiResult<T>
{
public bool Success { get; }
public T Dto { get; }
public ApiResult(bool success, T dto)
{
Success = success;
Dto = dto;
}
}
public interface ISomeServiceProxy
{
ApiResult<Dto1> GetTheThing(string someParam);
}
有了它,您现在可以为您调用的web服务定义代理。代理接口可以如下所示:
public class ApiResult<T>
{
public bool Success { get; }
public T Dto { get; }
public ApiResult(bool success, T dto)
{
Success = success;
Dto = dto;
}
}
public interface ISomeServiceProxy
{
ApiResult<Dto1> GetTheThing(string someParam);
}
公共接口服务代理
{
ApiResult GetTheThing(字符串someParam);
}
在该接口的实现中,您需要使用JSON.NET将响应反序列化为Dto1
,并将其包装为apireult
此外,您可能希望使代理使用async
。我在这些例子中没有提到,转换它们是很简单的