1

我正在 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
4

1 回答 1

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中的响应

于 2012-06-20T13:58:46.647 回答