我正在用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
答案 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中得到答案