Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WCF REST通用请求获取特定于类型的响应?_C#_Json_Generics_Serialization - Fatal编程技术网

C# 从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

我正在设计一个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)
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夏尔巴-对不起。我打错了那一点。谢谢,贾斯汀,这很有效。非常感谢。因此,我的工作更深入了,但在弄清楚如何序列化内存中特定于类型的对象时遇到了问题。传统上,我将域对象转换为数据传输对象,然后再沿线路发送它们,但不知道如何使用流进行转换。我已经在这里重新发布了我的问题(因为它离题了)。如果你有机会插话,我将不胜感激。谢谢