【问题标题】:Send JSON as response from a WebService in .NET从 .NET 中的 WebService 发送 JSON 作为响应
【发布时间】:2012-06-20 12:21:49
【问题描述】:

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

【问题讨论】:

  • 我使用了“ResponseFormat:=WebMessageFormat.Json”,它工作正常(没有“\”)。你确定它不仅在调试器视图上吗?
  • 嗯。你可能是对的......我必须检查一下。
  • 不,似乎并非如此。我创建了一个小型 WS 客户端,并从服务中获取带有 \" 的字符串...
  • 你在浏览器中查看响应了吗???
  • 是的!我也在 Firefox 中使用 RESTClient 扩展...事实上,当我查看发送的原始数据时,它周围有 [...]。

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


【解决方案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 格式的响应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多