Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试使用JSON.net和WCF Rest服务将XML转换为JSON输出时出现反斜杠问题_C#_Json_Xml_Wcf - Fatal编程技术网

C# 尝试使用JSON.net和WCF Rest服务将XML转换为JSON输出时出现反斜杠问题

C# 尝试使用JSON.net和WCF Rest服务将XML转换为JSON输出时出现反斜杠问题,c#,json,xml,wcf,C#,Json,Xml,Wcf,我已经花了两天时间试图找到解决问题的方法,但没有结果,所以我希望得到任何提示 我正在努力实现的目标: 简单地说,我创建并发布了一个WCF服务(RESTfulWeb服务),其中一个方法GetUsers应该返回如下内容: [{"Name":"John","Surname":"Dell","GroupName":"Operator"}, {"Name":"

我已经花了两天时间试图找到解决问题的方法,但没有结果,所以我希望得到任何提示

我正在努力实现的目标:
简单地说,我创建并发布了一个WCF服务(RESTfulWeb服务),其中一个方法GetUsers应该返回如下内容:

[{"Name":"John","Surname":"Dell","GroupName":"Operator"}, {"Name":"John1","Surname":"Hp","GroupName":"Operator"}, {"Name":"John2","Surname":"Apple","GroupName":"Operator"}] 
不幸的是,当我在浏览器中测试此方法时(http://localhost:28099/TestAPI.svc/GetUsers?inputName=Company,我得到的响应包括转义反斜杠和结果开头和结尾的双引号,如下所示:

 "[{\"Name\":\"John\",\"Surname\":\"Dell\",\"GroupName\":\"Operator\"}, {\"Name\":\"John1\",\"Surname\":\"Hp\",\"GroupName\":\"Operator\"}, {\"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>

正如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并返回给客户端


WCF已经将返回的值序列化为JSON(如果响应类型与您的情况一样设置为JSON),您不需要JSON NET。这里发生的是将对象序列化并返回一个字符串,然后WCF将该字符串再次序列化为JSON。结果是,您返回的不是JSON对象,而是单个字符串(它也是有效的json,但不是您想要的)。因此,直接从您的方法返回一个对象,而不进行序列化。让我看看我的理解是否正确。我是否应该创建一个类“Employees”(将名称、姓氏和组名作为DataMember)->将我的方法更改为return List,在方法本身中,我应该将XML结果转换为List类型的对象并返回该对象?是的,这将是最好的操作过程。您可以尝试返回ds.Tables[0],但出于许多原因,我最好使用专用类。这基本上似乎是一个重复的-,您将
数据表
序列化为字符串,然后在返回时由框架第二次重新序列化。至于如何解决您的问题,如果您不想创建数据模型,有一个选项可以返回
数据直接使用表
只需通过
WebOperationContext.Current.CreateTextResponse返回已经序列化的JSON,如和所示。
public class Service : IService

{

    public Person GetUsers()

    {

        Person person = new Person();

        person.Name = "wwww";

        person.Surname = "Dell";

        person.GroupName = "Operator";

        return person;
    }

}