Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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#web服务获得正确的JSON_C#_Json_Wcf - Fatal编程技术网

没有通过c#web服务获得正确的JSON

没有通过c#web服务获得正确的JSON,c#,json,wcf,C#,Json,Wcf,这是我的web服务IRestService.cs { [ServiceContract] public interface IRestServiceImpl { [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wr

这是我的web服务IRestService.cs

 {

   [ServiceContract]
     public interface IRestServiceImpl
      {
        [OperationContract]
        [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "json/{id}")]
        string JSONData(string id);


        }
         }
这是我的JSON助手类

   public class JSONHelper
    {
      public static string ToJSON(this object obj)
      {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(obj);
       }

    public static string ToJSON(this object obj, int recursionDepth)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RecursionLimit = recursionDepth;
        return serializer.Serialize(obj);
      }
我正在解析JSOn格式类型的字符串的服务

    public class RestServiceImpl : IRestServiceImpl
    {
    #region IRestServiceImpl Members

    public string XMLData(string id)
    {
        return "You requested product " + id;
    }

    public string JSONData(string id)
    {
        id = @"{""contacts"":   [{""country"":""Pakistan"",""sunrise"":1381107633,""sunset"":1381149604}]}";
         return id;
    }

    #endregion

    }
  }
这是我正在使用的链接,但却出错了

JSON是

    {"JSONDataResult":"{\"contacts\":   [{\"country\":\"Pakistan\",\"sunrise\":1381107633,\"sunset\":1381149604}]}"}
我做错了什么? 为什么我在这个JSON中得到反斜杠

您的返回类型是“string”,您返回的JSON字符串中有双引号。为了避开它,WCF添加了反斜杠


要摆脱它,您应该在WCF中实现返回类型System.IO.Stream。它只是字符串的一种序列化形式。

使用某种json序列化程序,可以将c#对象序列化为json,如t

您可以返回
对象或对象列表。
。请查看下面的示例代码。有一个GET方法和一个POST方法。一个方法将返回RequestData对象,另一个方法将返回RequestData列表

[ServiceContract]
public interface IDataService
{
    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedResponse)]
    List<RequestData> GetUser(Request data);

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "UsersList/{id}",RequestFormat=WebMessageFormat.Json)]
    RequestData UsersList(string id);



}

public class DataService : IDataService
{

    public List<RequestData> GetUser(Request data)
    {
        List<RequestData> list = new List<RequestData>();
        if (data.Name.ToUpper() == "MAIRAJ")
        {
            list.Add(new RequestData
            {
                Name = "Mairaj",
                Age = 25,
                Address = "Test Address"
            });
            list.Add(new RequestData
            {
                Name = "Ahmad",
                Age = 25,
                Address = "Test Address"
            });
            list.Add(new RequestData
            {
                Name = "Minhas",
                Age = 25,
                Address = "Test Address"
            });
        }
        return list;
    }
    public RequestData UsersList(string userId)
    {
        if (userId == "1")
        {
            return new RequestData
            {
                Name = "Mairaj",
                Age = 25,
                Address = "Test Address"
            };
        }
        else
        {
            return new RequestData
            {
                Name = "Amir",
                Age = 25,
                Address = "Test Address"
            };
        }
    }

}
[DataContract]
public class RequestData
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int Age { get; set; }
    [DataMember]
    public string Address { get; set; }

}
[服务合同]
公共接口IDataService
{
[经营合同]
[WebInvoke(Method=“POST”,ResponseFormat=WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedResponse)]
列表GetUser(请求数据);
[经营合同]
[WebGet(ResponseFormat=WebMessageFormat.Json,UriTemplate=“UsersList/{id}”,RequestFormat=WebMessageFormat.Json)]
RequestData用户列表(字符串id);
}
公共类数据服务:IDataService
{
公共列表GetUser(请求数据)
{
列表=新列表();
if(data.Name.ToUpper()=“MAIRAJ”)
{
添加(新的请求数据)
{
Name=“Mairaj”,
年龄=25岁,
Address=“测试地址”
});
添加(新的请求数据)
{
Name=“Ahmad”,
年龄=25岁,
Address=“测试地址”
});
添加(新的请求数据)
{
Name=“Minhas”,
年龄=25岁,
Address=“测试地址”
});
}
退货清单;
}
公共请求数据用户列表(字符串用户ID)
{
如果(userId==“1”)
{
返回新的请求数据
{
Name=“Mairaj”,
年龄=25岁,
Address=“测试地址”
};
}
其他的
{
返回新的请求数据
{
Name=“阿米尔”,
年龄=25岁,
Address=“测试地址”
};
}
}
}
[数据合同]
公共类请求数据
{
[数据成员]
公共字符串名称{get;set;}
[数据成员]
公共整数{get;set;}
[数据成员]
公共字符串地址{get;set;}
}
这里是web.config

<configuration>
<configSections>
</configSections>
<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" />
</system.web>

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="EndpBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="ServiceBehavior" name="WCFWebApp.DataService">
    <endpoint address="" binding="webHttpBinding" contract="WCFWebApp.IDataService" behaviorConfiguration="EndpBehavior"/>
  </service>
</services>
</system.serviceModel>
</configuration>


类似问题您在哪里看到反斜杠?在调试器中?这只是调试器添加反斜杠只是为了迷惑你。这是JSON的格式。这没什么错。@Malaika如果您必须从服务返回JSON作为字符串,而不是Thangadurai linked建议的对象,那么在收到JSON字符串后,您将替换它“\with”“using string replace并随后解析JSON。因此,您在调试器中没有看到这些斜杠?即使您使用JSON序列化程序返回字符串,也会有这些反斜杠。我们必须在请求类中包含的内容..public List GetUser(请求数据)。。因为我在这行中出错了。如果请求数据在此行中为wrrittenGetUser(请求数据),则在我调用URL时它不起作用。请检查此链接。这是我根据你的帖子制作的web服务,现在我没有在url{“JSONDATASURCT”:“{”contacts\”:[{“country\”:“Pakistan\”,“sunrise\”:1381107633,\“sunset\”:1381149604}}”中获得数据。}请在返回byte[]x=Encoding.UTF8.GetBytes(>)之前,帮我更正一下,在方法末尾添加这个数据; WebOperationContext.Current.OutgoingResponse.ContentType=“text/plain”;返回新的内存流(x);还要确保方法返回类型为“System.IO.Stream”