Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
从.NET中的Web服务发送JSON作为响应_.net_Vb.net_Json_Web Services - Fatal编程技术网

从.NET中的Web服务发送JSON作为响应

从.NET中的Web服务发送JSON作为响应,.net,vb.net,json,web-services,.net,Vb.net,Json,Web Services,我正在VB.NET中构建一个Web服务,我想用JSON来回答这个问题。 目前我的答案是这样的 {\"myVar1\" : \"From moscow\", \"myVar2\" : \"With love\"} 我希望能够使用“(和回车),并有如下响应: {"myVar1" : "From moscow", "myVar2" : "With love"} 如何避免“in\”的这种转码 以下是我的接口定义: <OperationContract()> <WebGet(UriT

我正在VB.NET中构建一个Web服务,我想用JSON来回答这个问题。 目前我的答案是这样的

{\"myVar1\" : \"From moscow\", \"myVar2\" : \"With love\"}
我希望能够使用“(和回车),并有如下响应:

{"myVar1" : "From moscow", "myVar2" : "With love"}
如何避免“in\”的这种转码

以下是我的接口定义:

<OperationContract()>
<WebGet(UriTemplate:="/TemplateGet?ID={id}",
        ResponseFormat:=WebMessageFormat.Json, 
        BodyStyle:=WebMessageBodyStyle.Bare)>
Function TemplateGet(id As String) As String
我不是一个VB.net的家伙,(我也没有找到一个VB的例子),所以链接将使用c#-但简单地翻译成VB应该是一样的

当您编写wcf服务时,您不应该自己编写序列化(在您的例子中是json)

您可以返回一个对象(您应该将其注册为已知类型-参见下面的示例),结果将被序列化

具有对象的wcf服务示例:

在您的情况下,您应该创建这样一个类:

   [DataContract]
   public class MyServiceResultClass
   {
       [DataMember]
       public string myVar1 {get; set;}

       [DataMember]
       public string myVar2 {get; set;}
   }
   Function TemplateGet(id As String) As String Implements ISearch.TemplateGet
      Dim reponse As MyServiceResultClass = new MyServiceResultClass() // -- Change to vb syntax here
      Return reponse
   End Function
MyServiceResultClass
注册为服务已知类型,并将您的方法更改为类似以下内容:

   [DataContract]
   public class MyServiceResultClass
   {
       [DataMember]
       public string myVar1 {get; set;}

       [DataMember]
       public string myVar2 {get; set;}
   }
   Function TemplateGet(id As String) As String Implements ISearch.TemplateGet
      Dim reponse As MyServiceResultClass = new MyServiceResultClass() // -- Change to vb syntax here
      Return reponse
   End Function
就是这样…你会得到json的响应,我不是VB.net的人(我也没有找到VB的例子),所以链接将使用c#-但是简单地翻译成VB应该是一样的

当您编写wcf服务时,您不应该自己编写序列化(在您的例子中是json)

您可以返回一个对象(您应该将其注册为已知类型-参见下面的示例),结果将被序列化

具有对象的wcf服务示例:

在您的情况下,您应该创建这样一个类:

   [DataContract]
   public class MyServiceResultClass
   {
       [DataMember]
       public string myVar1 {get; set;}

       [DataMember]
       public string myVar2 {get; set;}
   }
   Function TemplateGet(id As String) As String Implements ISearch.TemplateGet
      Dim reponse As MyServiceResultClass = new MyServiceResultClass() // -- Change to vb syntax here
      Return reponse
   End Function
MyServiceResultClass
注册为服务已知类型,并将您的方法更改为类似以下内容:

   [DataContract]
   public class MyServiceResultClass
   {
       [DataMember]
       public string myVar1 {get; set;}

       [DataMember]
       public string myVar2 {get; set;}
   }
   Function TemplateGet(id As String) As String Implements ISearch.TemplateGet
      Dim reponse As MyServiceResultClass = new MyServiceResultClass() // -- Change to vb syntax here
      Return reponse
   End Function

就是这样……您将得到json格式的响应

我使用了“ResponseFormat:=WebMessageFormat.json”,它工作正常(没有\”)。你确定它不仅在调试器视图上吗?嗯。你可能是对的。。。我得检查一下。不,看起来不是这样。我创建了一个小的WS-Client,从服务中得到带有\“的字符串…你在浏览器中检查了响应吗???是的!我在Firefox中也使用了RESTClient扩展…事实上,当我查看发送的原始数据时,它周围有[…]个字符串。我使用了“ResponseFormat:=WebMessageFormat.Json”,它工作正常(没有\”)。你确定它不仅在调试器视图上吗?嗯。你可能是对的。。。我得检查一下。不,看起来不是这样。我创建了一个小的WS-Client,从服务中获得带有\“的字符串…你在浏览器中检查了响应吗???是的!我在Firefox中也使用了RESTClient扩展…事实上,当我查看发送的原始数据时,它周围有[…]。