如何解决尝试使用json.net和WCF Rest Service将XML转换为JSON输出时的反斜杠问题
我已经花了两天的时间来寻找解决问题的方法,但是没有结果,所以我希望能收到任何提示。
我要实现的目标:
简要地说,我已经使用一种方法GetUsers创建并发布了WCF服务(RESTful Web服务),该方法应返回如下内容:
[{"Name":"John","Surname":"Dell","GroupName":"Operator"},{"Name":"John1","Surname":"Hp",{"Name":"John2","Surname":"Apple","GroupName":"Operator"}]
不幸的是,当我在浏览器中测试此方法(http:// localhost:28099 / TestAPI.svc / GetUsers?inputName = Company时),我得到的响应包括转义反斜杠和开头和结尾的双引号。结果的结尾,如下所示:
"[{\"Name\":\"John\",\"Surname\":\"Dell\",\"GroupName\":\"Operator\"},{\"Name\":\"John1\",\"Surname\":\"Hp\",{\"Name\":\"John2\",\"Surname\":\"Apple\",\"GroupName\":\"Operator\"}]"
正在使用此Web服务的应用程序告诉我这不是有效的JSON格式。
在我的Web服务方法中,我将获取XML格式的初始数据,并将其传递给datatable对象,然后尝试使用JSON.NET将其转换为JSON。
下面是源XML:
<Root>
<row Name ="John" Surname="Dell" GroupName="Operator"/>
<row Name ="John1" Surname="Hp" GroupName="Operator"/>
<row Name ="John1" Surname="Apple" GroupName="Operator"/>
</Root>
以下是我的WCF代码中的摘录:
[ServiceContract]
public interface IWebServiceTest
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare)]
String GetUsers(string inputName);
}
public class TestWCF: IWebServiceTest
{
Public String GetUsers(string inputName)
{
...................
StringReader stringReader1 = new StringReader(responseXMLResult.ToString());
XmlReader reader = XmlReader.Create(stringReader1);
ds.ReadXml(reader);
string json = JsonConvert.SerializeObject(ds.Tables[0],Newtonsoft.Json.Formatting.None);
return json
}
解决方法
正如Evk所说,WCF已将您返回的值序列化为JSON,我们不再需要使用JSON NET。在WCF中,我们使用DataContract序列化对象。这是一个演示:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(ResponseFormat =WebMessageFormat.Json,BodyStyle =WebMessageBodyStyle.Bare)]
Person GetUsers();
}
这是服务接口,我们将ResponseFormat设置为json。
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Surname { get; set; }
[DataMember]
public string GroupName { get; set; }
}
这是我们要传输的Person对象,我们使用DataContract序列化该对象。
public class Service : IService
{
public Person GetUsers()
{
Person person = new Person();
person.Name = "wwww";
person.Surname = "Dell";
person.GroupName = "Operator";
return person;
}
}
这是方法的实现类,我们直接返回person对象,WCF将帮助我们将该对象序列化为json并将其返回给客户端。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。