【问题标题】:C# API Cant get dynamic value to populate listC# API 无法获取动态值来填充列表
【发布时间】:2017-07-14 16:21:30
【问题描述】:

此程序使用 API 从数据库中获取信息。 JSON 文件进来并填充内容。然后内容填充动态“持有者”,但是当我将持有者分配给“列表”时,数据不会填充列表。我不明白我做错了什么。任何帮助将不胜感激。

public class Rootobject
        {
        //Employer and Carrier information 
        public string Employer { get; set; }
        public string Phone { get; set; }
        public string InsUnder { get; set; }
        public string Carrier { get; set; }
        public string CarrierPh { get; set; }
        public string Group { get; set; }
        public string MailTo { get; set; }
        public string MailTo2 { get; set; }  //place holder
        public string MailTo3 { get; set; }
        public string EClaims { get; set; }
        public string FAXClaims { get; set; }
        public string DMOOption { get; set; }

    public class iapVm
    {
        public List<Rootobject> data { get; set; }
    }

    public static iapVm GetList(string iapNumber)
    {

        //Response object
        iapVm list = new iapVm();

        List<Rootobject> lstRootobject = new List<Rootobject>();

        //      //Create client object for request
        var client = new RestClient("http://myurls/json/"); /// call url

        var request = new RestRequest(Method.GET);

        //      //Add parameter
        request.AddParameter("Number", Number);

        //      //Create response object
        IRestResponse response = client.Execute(request);

        var content = response.Content;

        //      //Convert string to json

        dynamic holder = Newtonsoft.Json.JsonConvert.DeserializeObject(content);



        holder = list;

        list.data = lstRootobject;

        return list; 
}

【问题讨论】:

  • 您正在填充“持有人”,然后您没有做任何事情并覆盖它成为“列表”。然后你直接与列表交互....但是列表总是一个空的new iapVm()
  • 我不确定IRestResponse 返回的是什么,但如果它与HttpClient 相同,您是否需要先从内容中取出字符串?例如response.Content.ReadStringAsync().GetAwaiter().GetResult()。这仍然没有解决您没有对持有者做任何事情的任何问题,并且该列表始终是默认实例。
  • 我现在只是在猜测,因为没有太多事情要做...但是也许你想删除holder = list; 行,然后在list.data = lstRootobject; 下做一个list.data.Add(holder)?跨度>
  • 你有content 返回的字符串样本
  • 你可以试试这个: public static iapVm GetList(string iapNumber) { iapVm list = new iapVm(); var client = new RestClient("myurls/json/"); var request = new RestRequest(Method.GET); request.AddParameter("Number", Number); IRestResponse response = client.Execute(request); var content = response.Content ; List lstRootobject = Newtonsoft.Json.JsonConvert.DeserializeObject>(content); list.data = lstRootobject; 返回列表; }

标签: c# json api c#-4.0 json.net


【解决方案1】:

我已经使用您提供的示例 Json 数据进行了快速测试,通过将响应内容直接反序列化为 List&lt;RootObject&gt; 似乎可以正常工作

这是我的测试的样子:(我删掉了所有的网络通话内容,因为我无法测试它,而且我们知道你可以恢复内容。)

 public class Rootobject
 {
     //Employer and Carrier information 
     public string Employer { get; set; }
     public string Phone { get; set; }
     public string InsUnder { get; set; }
     public string Carrier { get; set; }
     public string CarrierPh { get; set; }
     public string Group { get; set; }
     public string MailTo { get; set; }
     public string MailTo2 { get; set; } //place holder
     public string MailTo3 { get; set; }
     public string EClaims { get; set; }
     public string FAXClaims { get; set; }
     public string DMOOption { get; set; }
 }

 public class iapVm
 {
     public List<Rootobject> data { get; set; }
 }

 public class Class1
 {
     public iapVm TestDeserializingValidResponseContent()
     {
         //Response object
         iapVm list = new iapVm();
         string content = "[{\"_id\":\"asdf\",\"Employer\":\"1 800 Foo & Bar (Schedule Plan)\",\"EmpNumberXXX\":\"(333)-111-2222 : (800)-234-2344\",\"InsUnder\":\"asdf asdf\",\"DMOOption\":\"No\",\"Medical\":\"asdf (800)-234-2344 Group#:23443\",\"DateXXX\":\"May\",\"Carrier\":\"Cigna\",\"‌​CarrierPh\":\"(222)-‌​234-234234\",\"FAXClai‌​ms\":\"No. Will Not Accept\",\"Plan\":\"Self-Funded\",\"Group\":\"Cigna (800)-234-2344 Group#:23443\",\"GroupNum\":\"2343\",\"EClaims\":\"Yes\"}]";
         List<Rootobject> lstRootobject = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Rootobject>>(content);
         list.data = lstRootobject;
         return list;
     }
 }

【讨论】:

  • 太棒了,很高兴你能成功 :) 我知道这些事情有时会带来多大压力,我们都经历过
猜你喜欢
  • 2021-12-25
  • 2021-10-29
  • 2020-06-26
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 2011-01-13
  • 2015-09-01
相关资源
最近更新 更多