从.NET中的WebService发送JSON作为响应

时间:2012-06-20 12:21:50

标签: .net vb.net json web-services

我正在用VB.NET构建Web服务,我想用JSON回答。 目前我的答案看起来像这样

{\"myVar1\" : \"From moscow\", \"myVar2\" : \"With love\"}

我希望能够使用“(和CarriageReturn),并且有这样的响应:

{"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

我的答案很简单:

Function TemplateGet(id As String) As String Implements ISearch.TemplateGet
    Dim reponse As String = "{""MyVar1"" : ""From moscow"", ""MyVar2"" : ""With love""}"
    Return reponse
End Function

1 个答案:

答案 0 :(得分:1)

我不是VB.net的人,(我没有找到vb示例)所以链接将使用c# - 但是对vb的简单翻译应该是相同的。

当你编写wcf服务时,你不应该自己写序列化(在你的情况下为json)。

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

带有对象的wcf服务的示例:http://www.freddes.se/2010/05/19/wcf-knowntype-attribute-example/

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

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

       [DataMember]
       public string myVar2 {get; set;}
   }

MyServiceResultClass注册为服务已知类型,并将您的方法更改为:

   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中得到答案