C# 从WCF REST通用请求获取特定于类型的响应?
我正在设计一个WCF REST服务。设计的一个要求是 客户不知道给定请求的细节。例如 以下请求: 将返回:C# 从WCF REST通用请求获取特定于类型的响应?,c#,json,generics,serialization,C#,Json,Generics,Serialization,我正在设计一个WCF REST服务。设计的一个要求是 客户不知道给定请求的细节。例如 以下请求: 将返回: Request: GetGroup(GroupId = 0) Response: { Title="Country", children = { title="USA", Id=1, type=GROUP}, {title="England", Id=2, type=GROUP} } } 以及以下要求: 将返回: Request: GetGroup(groupId = 3) Re
Request: GetGroup(GroupId = 0)
Response:
{
Title="Country",
children =
{
title="USA", Id=1, type=GROUP},
{title="England", Id=2, type=GROUP}
}
}
以及以下要求:
将返回:
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的基类
并且上面的类应该重写基类方法。如果这听起来是个好主意
如何解决这个问题的例子,我希望能举个例子。或者,也可以提出其他建议
提前谢谢 您始终可以创建一个返回流的服务,并使用
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);
}
在这种情况下,您只需根据参数将适当的对象加载到内存中,并通过流
返回适当的强类型对象
这与我过去在没有类型信息的情况下从WCF服务返回Json结果时使用的方法相同(该方法是由Microsoft的WCF团队成员建议的,因此我认为它相当可靠).您始终可以创建一个返回流的服务,并使用
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);
}
在这种情况下,您只需根据参数将适当的对象加载到内存中,并通过流
返回适当的强类型对象
这与我过去在没有类型信息的情况下从WCF服务返回Json结果时使用的方法相同(该方法是由Microsoft WCF团队的一名成员建议的,因此我认为它相当可靠)。谢谢Justin-这听起来更接近我要找的内容。你知道有什么例子说明如何实施你的建议吗?再次感谢。Justin,对于您在代码中提到的JsonSerializer方法,您使用的是Newtonsoft.Json还是其他DLL?它是从哪里来的?我使用的是框架4@Code夏尔巴-对不起。我打错了那一点。谢谢,贾斯汀,这很有效。非常感谢。因此,我的工作更深入了,但在弄清楚如何序列化内存中特定于类型的对象时遇到了问题。传统上,我将域对象转换为数据传输对象,然后再沿线路发送它们,但不知道如何使用流进行转换。我已经在这里重新发布了我的问题(因为它离题了)。如果你有机会插话,我将不胜感激。谢谢谢谢贾斯汀-这听起来更接近我想要的。你知道有什么例子说明如何实施你的建议吗?再次感谢。Justin,对于您在代码中提到的JsonSerializer方法,您使用的是Newtonsoft.Json还是其他DLL?它是从哪里来的?我使用的是框架4@Code夏尔巴-对不起。我打错了那一点。谢谢,贾斯汀,这很有效。非常感谢。因此,我的工作更深入了,但在弄清楚如何序列化内存中特定于类型的对象时遇到了问题。传统上,我将域对象转换为数据传输对象,然后再沿线路发送它们,但不知道如何使用流进行转换。我已经在这里重新发布了我的问题(因为它离题了)。如果你有机会插话,我将不胜感激。谢谢