Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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字符串反序列化为C列表_C#_Json_Wcf - Fatal编程技术网

C# JSON字符串反序列化为C列表

C# JSON字符串反序列化为C列表,c#,json,wcf,C#,Json,Wcf,我试图将WCF服务中的JSON字符串反序列化到显示空输出的C列表中 WCF服务 GetJSONString方法返回JSON字符串 C类模型 现在将json反序列化到列表中 输出: **我们之前已经尝试过,但它返回null** var results = JsonConvert.DeserializeObject<List<site>>(s); 上述代码结果返回Null 请建议我解决这个问题 谢谢 Venkatesh您的JSON字符串输出是一个列表。RootObject

我试图将WCF服务中的JSON字符串反序列化到显示空输出的C列表中

WCF服务

GetJSONString方法返回JSON字符串

C类模型

现在将json反序列化到列表中

输出:

**我们之前已经尝试过,但它返回null**

 var results = JsonConvert.DeserializeObject<List<site>>(s);
上述代码结果返回Null

请建议我解决这个问题

谢谢


Venkatesh

您的JSON字符串输出是一个列表。RootObject类不是列表,但包含类型为List的属性站点。您应该尝试以下方法:

第一个解决方案:

第四:在参考数据合同后,在客户端

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{

      /* Deserializing json data from service */

      DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(List<Site>));
      var result= deserializer.ReadObject(response.GetResponseStream());
}

结果,您将得到与JSON反序列化响应相对应的列表。我希望你能找到一种方法使它在你的代码中工作。如果需要,请随时与我联系。

我们尝试了您的建议,但未能将JSON字符串转换为列表集合,它返回null。请检查更新的代码。@user3167868第二个解决方案对您有效吗?是的。第二个解决方案很好,谢谢你的帮助help@Venkatesh很高兴这有帮助。请指出答案作为解决方案,并/或投赞成票?非常感谢。
"\"{\\\"Sites\\\" : [{\\\"EQ_DESC\\\" : \\\"SIERRA India\\\",\\\"EQ_CODE\\\" : \\\"1\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA Dubai\\\",\\\"EQ_CODE\\\" : \\\"24\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA Malaysia\\\",\\\"EQ_CODE\\\" : \\\"99\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA US\\\",\\\"EQ_CODE\\\" : \\\"100\\\"},{\\\"EQ_DESC\\\" : \\\"Mars India\\\",\\\"EQ_CODE\\\" : \\\"110\\\"},{\\\"EQ_DESC\\\" : \\\"???\\\",\\\"EQ_CODE\\\" : \\\"151\\\"},{\\\"EQ_DESC\\\" : \\\"turkey\\\",\\\"EQ_CODE\\\" : \\\"2299\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA Infosys\\\",\\\"EQ_CODE\\\" : \\\"2331\\\"},{\\\"EQ_DESC\\\" : \\\"Infosys\\\",\\\"EQ_CODE\\\" : \\\"2338\\\"}]}\""
 public class Site
{
 public string EQ_DESC { get; set; }
 public string EQ_CODE { get; set; }
}
public class RootObject
{
 public List<Site> Sites { get; set; }
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        /* Deserializing json data from service */
                        var jsoncontent = reader.ReadToEnd();
                        string s = jsoncontent.ToString();

                    var results = JsonConvert.DeserializeObject<RootObject>(s);
var results = JsonConvert.DeserializeObject<Rootobject>(s); 
 var results = JsonConvert.DeserializeObject<List<site>>(s);
var results = JsonConvert.DeserializeObject<List<Site>>(s);
public class RootObject : List<Site>
{
  //Whatever you want
}
var results = JsonConvert.DeserializeObject<RootObject>(s);
[ServiceContract]
public interface IServiceContract
{
   [OperationContract]
   [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest,
   RequestFormat = WebMessageFormat.Json,
   ResponseFormat = WebMessageFormat.Json)]
       List<Site> getuserSite(String UserCode);
}
public class ServiceContract : IServiceContract
{
   public List<Site> getuserSite(String UserCode)
   {
      //Do whatever you want that return a List<Site>
   }
}
[DataContract]
public class Site
{
   [DataMember]
    public string EQ_DESC { get; set; }
   [DataMember]
    public string EQ_CODE { get; set; }
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{

      /* Deserializing json data from service */

      DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(List<Site>));
      var result= deserializer.ReadObject(response.GetResponseStream());
}