ASP.NET REST服务在JSON结果中不带转义字符
我打电话给一家REST服务公司SearchFavorite,这家公司反过来又打电话给另一家服务公司a。 服务A已经返回JSON。但由于我的返回类型为searchFavoriteCompany,因此我的搜索结果将返回转义字符:ASP.NET REST服务在JSON结果中不带转义字符,asp.net,json,rest,escaping,Asp.net,Json,Rest,Escaping,我打电话给一家REST服务公司SearchFavorite,这家公司反过来又打电话给另一家服务公司a。 服务A已经返回JSON。但由于我的返回类型为searchFavoriteCompany,因此我的搜索结果将返回转义字符: "{\"responseHeader\":{\"status\":0,\"QTime\":2,\"params\":{\"facet\":\"false\",\"fl\":\"id,title,friendlyurl,avatar,locpath,objectid,obje
"{\"responseHeader\":{\"status\":0,\"QTime\":2,\"params\":{\"facet\":\"false\",\"fl\":\"id,title,friendlyurl,avatar,locpath,objectid,objecttype\",\"indent\":\"off\",\"start\":\"0\",\"q\":\"title_search:*castle*\",\"wt\":\"json\",\"fq\":\"userid:\\\"C325D42C-A777-4275-BDD2-D7810A8AB9AB\\\"\",\"rows\":\"10\",\"defType\":\"lucene\"}},\"response\":{\"numFound\":2,\"start\":0,\"docs\":[{\"title\":\"Castle A\",\"objecttype\":1,\"friendlyurl\":\"castle-a\",\"avatar\":\"6_887_castle-a.JPG\",\"objectid\":6},{\"title\":\"Castle B\",\"objecttype\":1,\"friendlyurl\":\"castle-b\",\"avatar\":\"794_360_13j-Castle-by-night.jpg\",\"objectid\":794}]}}\u000a"
我不知道如何确保返回的JSON结果中没有这些转义字符
Imyservice.vb
Namespace RestService
<ServiceContract()>
Public Interface Imyservice
<OperationContract()> _
Namespace RestService
Public Class iservice
Implements Imyservice
Public Function searchFavoriteCompany(ByVal q As String, ByVal uuid As String) As String Implements Imyservice.searchFavoriteCompany
Dim req As HttpWebRequest = HttpWebRequest.Create("http://localhost/getjson") <---- this service already returns JSON data
Dim Resp As HttpWebResponse = req.GetResponse()
Dim reader As StreamReader = New StreamReader(Resp.GetResponseStream)
Dim responseString As String = reader.ReadToEnd()
Return responseString
End Function
End Class
End Namespace
iservice.svc.vb
Namespace RestService
<ServiceContract()>
Public Interface Imyservice
<OperationContract()> _
Namespace RestService
Public Class iservice
Implements Imyservice
Public Function searchFavoriteCompany(ByVal q As String, ByVal uuid As String) As String Implements Imyservice.searchFavoriteCompany
Dim req As HttpWebRequest = HttpWebRequest.Create("http://localhost/getjson") <---- this service already returns JSON data
Dim Resp As HttpWebResponse = req.GetResponse()
Dim reader As StreamReader = New StreamReader(Resp.GetResponseStream)
Dim responseString As String = reader.ReadToEnd()
Return responseString
End Function
End Class
End Namespace
但是我得到了错误“对象引用未设置为对象的实例”
我检查了:responsestring包含一个值,所以这不是问题所在。如果不能将输出直接传递给响应,那么最好返回传统方法,并从方法返回类型安全的对象。您已经获得了原始服务传递给您的JSON,您的最终目标是将该对象返回给调用者 假设您的示例中有一个完整的JSON对象,您可以首先转到获取JSON并从中创建类。它使用C#,但您可以使用类似的方法轻松地将其转换为VB 如果您按照这些步骤操作,您将得到几个类,包括一个名为
RootObject
,其中包含responseHeader
和response
的属性,以及所需的其他类。您可以根据需要重命名这些类,并将它们放入适当的名称空间中——只需保留属性名,使它们与JSON匹配即可
一旦您获得了这个
RootObject
类(或者您将其重命名为什么),您就可以将从原始服务获得的JSON反序列化为RootObject
类型的对象,然后您的WebAPI方法将只返回一个RootObject
。与任何其他WCF调用一样,框架将负责为调用方将该对象序列化回JSON(或XML)。看看这是否有帮助。如果服务已经返回JSON数据,那么上面的一切(无论如何)是为了什么?除了返回一个字符串(可能现在使用字符串内容类型而不是application/json)之外,没有看到你在做什么?@JoeEnos:我用你在其他帖子中的建议更新了我的帖子,但它仍然不起作用EdSF:你是对的,但我的其他服务是本地的,不能通过REST直接访问。我将如何按照您的建议更改内容类型?这是托管在IIS中还是像在Windows服务中一样自托管?如果它是自托管的,那么HttpContext.Current上的NullReferenceException
就有意义了。我如何检查它?:$如果它是自托管的,我将如何修复它?