C# 是否可以通过不声明ServiceKnownType的JSON passthrough创建RESTful WCF服务
我有一个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.的解决方案:)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字符串反序列化为动态对象。尽管我的服务契约说它将返
您可以创建一个返回流的方法(可以将其视为“返回任何对象”)
您可以创建一个返回流的方法(可以将其视为“返回任何对象”)
您可以创建一个返回流的方法(可以将其视为“返回任何对象”)
您可以创建一个返回流的方法(可以将其视为“返回任何对象”)
当然,有人想知道,为什么我要费心使用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;
}