Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# 是否可以通过不声明ServiceKnownType的JSON passthrough创建RESTful WCF服务_C#_Json_Wcf_Web Services_Rest - Fatal编程技术网

C# 是否可以通过不声明ServiceKnownType的JSON passthrough创建RESTful WCF服务

C# 是否可以通过不声明ServiceKnownType的JSON passthrough创建RESTful WCF服务,c#,json,wcf,web-services,rest,C#,Json,Wcf,Web Services,Rest,我有一个C#WCF RESTful服务充当JSON传递,这意味着我的服务对另一个RESTful服务执行HTTPGet—接收一个JSON响应,我需要将该响应返回给调用方。此传递服务的原因是我们的企业不允许不同的域进行通信,这将作为解决方案公开。当已知类型包含在该服务中时,一切正常,但是这意味着中间服务在不关心接收到什么JSON并将其发送回调用方的情况下,必须针对每个DataContract更改进行更新/重新发布 我尝试使用JSON.NET将JSON字符串反序列化为动态对象。尽管我的服务契约说它将返

我有一个C#WCF RESTful服务充当JSON传递,这意味着我的服务对另一个RESTful服务执行HTTPGet—接收一个JSON响应,我需要将该响应返回给调用方。此传递服务的原因是我们的企业不允许不同的域进行通信,这将作为解决方案公开。当已知类型包含在该服务中时,一切正常,但是这意味着中间服务在不关心接收到什么JSON并将其发送回调用方的情况下,必须针对每个DataContract更改进行更新/重新发布

我尝试使用JSON.NET将JSON字符串反序列化为动态对象。尽管我的服务契约说它将返回一个动态类型,并且所有类型都符合要求,但我在运行时收到一个ServiceKnownType序列化错误。我无法在运行时动态声明KnownType b/c我希望我的服务对该类型一无所知

(A) 域X中的Web应用-->(B)我的面向公众服务-->(C)域Y中的RESTful WCF服务

甚至可以不反序列化接收到的JSON并在响应中发送出去吗? 其他想法?有没有代码能帮助我更好地描述自己

谢谢

这是多亏了L.B.的解决方案:)


您可以创建一个返回流的方法(可以将其视为“返回任何对象”)


您可以创建一个返回流的方法(可以将其视为“返回任何对象”)


您可以创建一个返回流的方法(可以将其视为“返回任何对象”)


您可以创建一个返回流的方法(可以将其视为“返回任何对象”)



当然,有人想知道,为什么我要费心使用JSON.NET将JSON字符串反序列化为动态对象。也许在公共服务方面,除了作为一个通行证之外,还有一些附加的东西。我试着用它来获得想要的结果。我将重新创建错误以包含文本以获得进一步帮助。@L.B.我让您的解决方案工作,但它将其视为字符串,并在所有内容中添加引号,而不是返回真正的JSON对象。我在原始问题中添加了尝试代码。IE-{“ActionItemColor:“00fa08”,“AppProvisionionDate:“2013-11-06T16:55:26”,“AppVersion:“2.6.3”,“BackgroundTextureImageID:“2”,…@AdventurGurl不。它不把它当作字符串。我只是测试了它,它正常工作。一定有什么东西你没有给我们看。@L.B.-的确,你是对的,我错了!非常感谢你(A) 在上面的场景中,我刚刚测试了他们收到的响应,并且工作得非常出色。我添加的代码也是我最初使用您的解决方案提出的问题,这就是整个方法(加上try/catch)当然,有人想知道为什么我尝试使用JSON.NET将JSON字符串反序列化为一个动态对象。也许在面向公众的服务中添加了一些东西,而不是充当一个通孔。@ CONRADFRIX——中间服务中没有添加任何东西。我试着用它来获得想要的结果。或者包含文本以获得进一步帮助。@L.B.我让您的解决方案开始工作,但它将其视为字符串,并在所有内容中添加引号,而不是返回真正的JSON对象。我在原始问题中添加了尝试代码。IE-{“ActionItemColor”:“00fa08”,“AppProvisionDate”:“2013-11-06T16:55:26”,“AppVersion”:“2.6.3”,“BackgroundTextureImageID”:“2”,…@AdventurGurl不。它不把它当作字符串。我只是测试了它,它正常工作。一定有什么东西你没有给我们看。@L.B.-事实上,你是对的,我错了!非常感谢你!!(A)在上面的场景中,我刚刚测试了他们收到的响应,并且工作得非常出色。我添加的代码也是我最初使用您的解决方案提出的问题,这就是整个方法(加上try/catch)当然,有人想知道为什么我尝试使用JSON.NET将JSON字符串反序列化为一个动态对象。也许在面向公众的服务中添加了一些东西,而不是充当一个通孔。@ CONRADFRIX——中间服务中没有添加任何东西。我试着用它来获得想要的结果。或者包含文本以获得进一步帮助。@L.B.我让您的解决方案开始工作,但它将其视为字符串,并在所有内容中添加引号,而不是返回真正的JSON对象。我在原始问题中添加了尝试代码。IE-{“ActionItemColor”:“00fa08”,“AppProvisionDate”:“2013-11-06T16:55:26”,“AppVersion”:“2.6.3”,“BackgroundTextureImageID”:“2”,…@AdventurGurl不。它不把它当作字符串。我只是测试了它,它正常工作。一定有什么东西你没有给我们看。@L.B.-事实上,你是对的,我错了!非常感谢你!!(A)在上面的场景中,我刚刚测试了他们收到的响应,并且工作得非常出色。我添加的代码也是我最初使用您的解决方案提出的问题,这就是整个方法(加上try/catch)当然,有人想知道为什么我尝试使用JSON.NET将JSON字符串反序列化为一个动态对象。也许在面向公众的服务中添加了一些东西,而不是充当一个通孔。@ CONRADFRIX——中间服务中没有添加任何东西。我试着用它来获得想要的结果。或者包含文本以获得进一步帮助。@L.B.我让您的解决方案开始工作,但它将其视为字符串,并在所有内容中添加引号,而不是返回真正的JSON对象。我在原始问题中添加了尝试代码。IE-{“ActionItemColor”:“00fa08”,“AppProvisionDate”:“2013-11-06T16:55:26”,“AppVersion”:“2.6.3”,“BackgroundTextureImageID”:“2”,…@AdventurGurl不。它没有将其视为字符串。我只是测试了它,它正常工作。一定有什么东西你没有向我们展示。@L.B.-事实上,你是正确的,而且
            //Call other WS  and get the Json response
            var request = WebRequest.Create(requestUri);
            request.ContentType = "application/json; charset=utf-8";
            string text;
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (var sr = new StreamReader(response.GetResponseStream()))
                {
                    text = sr.ReadToEnd();

                    var data = new MemoryStream(Encoding.UTF8.GetBytes(text));
                    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
                    WebOperationContext.Current.OutgoingResponse.ContentLength = data.Length;

                    return data;
                }
            }
[OperationContract, WebGet(ResponseFormat = WebMessageFormat.Json)]
public Stream SomeMethod(......)
{
    //Call other WS  and get the Json response

    var data = new MemoryStream(Encoding.UTF8.GetBytes(json));
    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
    WebOperationContext.Current.OutgoingResponse.ContentLength = data.Length;

    return data;
}