我正在设计WCF REST服务。设计的要求是 客户不知道给定请求的细节。例如, 以下要求:
https://www.domain.com/dashboard/group/id/0
会回来:
Request: GetGroup(GroupId = 0)
Response:
{
Title="Country",
children =
{
title="USA", Id=1, type=GROUP},
{title="England", Id=2, type=GROUP}
}
}
以下要求:
https://www.domain.com/dashboard/group/id/3
会回来:
Request: GetGroup(groupId = 3)
Response:
{
Title="Customers",
children =
{
title="General Motors", Id=1, type=CUSTOMER},
{title="General Electric", Id=2, type=CUSTOMER}
}
}
我的问题如何获取通用REST请求并返回特定类型的响应?
在我的项目中,有一些类型将在JSON响应中序列化。序列化对象取决于传入的groupId参数。他们是:
GROUP
CUSTOMER
FACILITY
TANK
在相关文章中,有人建议我创建一个公开GetGroupById的基类 以上类应该重写基类方法。如果这听起来很好 如何解决这个问题的例子,我很欣赏一个例子。或者,或者,其他建议。
提前致谢。
答案 0 :(得分:1)
您始终可以创建一个返回Stream的服务,并使用JsonSerializer
将对象序列化为MemoryStream
,然后从服务中返回MemoryStream
:
public Stream GetSomeObject(int groupId)
{
byte[] bytes;
var serializer = new JavaScriptSerializer();
switch(groupId)
{
case 2:
var groups = GetGroups(); // fill the groups however
bytes = Encoding.UTF8.GetBytes(serializer.Serialize(groups));
break;
case 3:
var customers = GetCustomers();
bytes = Encoding.UTF8.GetBytes(serializer.Serialize(customers));
break;
}
return new MemoryStream(bytes);
}
在这种情况下,您只需根据参数将适当的对象加载到内存中,并通过Stream
返回相应的强类型对象。
这与我过去用来从WCF服务返回没有类型信息的Json结果的方法相同(该方法是由Microsoft的WCF团队成员提出的,所以我认为它相当可靠)。