简体   繁体   English

如何在gridview上反序列化json对象?

[英]How to Deserialize json Object on gridview?

I am building C# windows form that accessing json data.我正在构建访问 json 数据的 C# windows 窗体。 I want to make it display on gridview.我想让它显示在 gridview 上。

How can I DeserializeObject the json data on gridview?如何DeserializeObject gridview 上的 json 数据? Sorry for newbie here.对不起,这里的新手。

   public class Namedata
    {
        public string PeopleName { get; set; }
        public string PeopleAge { get; set; }
        public string PeopleSurname { get; set; }
    }
    
    public class SName
    {
        public int ResultCode { get; set; }
        public string ResultName { get; set; }
        public IList<Namedata> namedatas { get; set; }
    }
    
    public class Example
    {
        public SName s_name { get; set; }
    }

  public void GETJsondata()
            {
    string username = "myuser"; 
     string password = "myuserpass";                 
     byte[] byteArray = Encoding.UTF8.GetBytes("{\"name\":\"" + Name.Text + "\",\"id\":\"1\"}");               
     WebRequest request = WebRequest.Create("http://myservice/Service4.svc/s_name");                
     request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password)));
     request.Method = "POST";
     request.ContentType = "application/json";
     request.ContentLength = byteArray.Length;
     Stream stream = request.GetRequestStream();
     stream.Write(byteArray, 0, byteArray.Length);
     stream = request.GetResponse().GetResponseStream();
     var result = (new StreamReader(stream).ReadLine());             
    
    JsonConvert.DeserializeObject<Example>(result); 
    
     ultragridiew1.DataSource = result;
    }

here are json data:这是json数据:

{
    "s_name": {
        "ResultCode": 1,
        "ResultName": "Found",
        "namedatas": [
            {              
                "PeopleName": "Jane",
                "PeopleAge": "20",
                "PeopleSurname": "Jade"

            },
                  {              
                "PeopleName": "Newton",
                "PeopleAge": "18",
                "PeopleSurname": "Handy"

            },
                  {              
                "PeopleName": "Java",
                "PeopleAge": "21",
                "PeopleSurname": "Handy"

            }
        ]
    }
}
    
   

You are not giving the gridview the correct source.您没有为 gridview 提供正确的来源。 Try this,尝试这个,

var data = JsonConvert.DeserializeObject<Example>(result);
ultragridiew1.DataSource = data.s_name.namedatas;

Base on the information, here is a potential solution:根据信息,这是一个潜在的解决方案:

 public class Namedata { public string PeopleName { get; set; } public string PeopleAge { get; set; } public string PeopleSurname { get; set; } } public class SName { public int ResultCode { get; set; } public string ResultName { get; set; } public Namedata[] namedatas { get; set; } } public class Example { public SName s_name { get; set; } } public void GETJsondata() { HttpClient _client = new HttpClient(); string username = "myuser"; string password = "myuserpass"; var byteArray = System.Text.Encoding.ASCII.GetBytes($"{username}:{password}"); _client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); dynamic content = new ExpandoObject(); content.name = Name.Text; content.id = 1; var json = Newtonsoft.Json.JsonConvert.SerializeObject(content); var data = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = _client.PostAsync("http://myservice/Service4.svc/s_name", data).Result; var result = Newtonsoft.Json.JsonConvert.DeserializeObject<Example>(response.Content.ReadAsStringAsync().Result); ultragridiew1.DataSource = data.s_name.namedatas; }

Main change I have done is to use HttpClient.我所做的主要更改是使用 HttpClient。 It removes a lot of boilerplate code that is required with webrequest.它删除了 webrequest 所需的大量样板代码。

@Chetan Ranpariya had correct me. @Chetan Ranpariya 纠正了我。 Thank you谢谢

   public class Namedata
    {
        public string PeopleName { get; set; }
        public string PeopleAge { get; set; }
        public string PeopleSurname { get; set; }
    }
    
    public class SName
    {
        public int ResultCode { get; set; }
        public string ResultName { get; set; }
        public IList<Namedata> namedatas { get; set; }
    }
    
    public class Example
    {
        public SName s_name { get; set; }
    }

  public void GETJsondata()
            {
    string username = "myuser"; 
     string password = "myuserpass";                 
     byte[] byteArray = Encoding.UTF8.GetBytes("{\"name\":\"" + Name.Text + "\",\"id\":\"1\"}");               
     WebRequest request = WebRequest.Create("http://myservice/Service4.svc/s_name");                
     request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password)));
     request.Method = "POST";
     request.ContentType = "application/json";
     request.ContentLength = byteArray.Length;
     Stream stream = request.GetRequestStream();
     stream.Write(byteArray, 0, byteArray.Length);
     stream = request.GetResponse().GetResponseStream();
     var result = (new StreamReader(stream).ReadLine());             
    
    var exampleObj = JsonConvert.DeserializeObject<Example>(result);
    
     ultragridiew1.DataSource = exampleObj.s_name.namedatas
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM