【问题标题】:Add range is not working with list [duplicate]添加范围不适用于列表[重复]
【发布时间】:2017-12-31 04:55:42
【问题描述】:

我有这样的收款人联系方式对象

public class PayeeContactDetails
{

    //[JsonProperty("id")]
    //[DefaultValue("")]
    //public int ID { get; set; }

    [JsonProperty("contact_name")]
    [DefaultValue("")]
    public string ContactName { get; set; }

    [JsonProperty("contact_email")]
    [DefaultValue("")]
    public string ContactEmail { get; set; }
    ........
    ........
}

在这里我有这样的 PayeeContactGroup 类

 public class PayeeContactGroup
 {   
    [JsonProperty("payee_contacts")]    
    public List<PayeeContactDetails> PayeeContact { get; set; }

 }

在这里,我在完成所有页面后逐页从 api 响应中获取数据,我需要一次将所有数据发送到数据库

为此我正在这样做

 PayeeContactGroup payeeContactDetails = new PayeeContactGroup();

  var response = httpClient.GetAsync(uri).Result;
  if (response.IsSuccessStatusCode)
  {
     string data = response.Content.ReadAsStringAsync().Result;
     var payeeContactGroupDetails = JsonConvert.DeserializeObject<PayeeContactGroup>(data);

     if(payeeContactGroupDetails.PayeeContact != null && payeeContactGroupDetails.currentPage == 1)
      {
         payeeContactDetails.PayeeContact = payeeContactGroupDetails.PayeeContact.ToList();
      }
      else if(payeeContactGroupDetails.PayeeContact != null && payeeContactGroupDetails.currentPage > 1)
      { 
         payeeContactDetails.PayeeContact.AddRange(payeeContactGroupDetails.PayeeContact); // error at this line 
      }
      .......
      ......
  }         

但我在 这一行

“payeeContactDetails.PayeeContact.AddRange(payeeContactGroupDetails.PayeeContact);” 错误:“对象引用未设置为对象”

有人可以帮忙解决这个问题吗.... 非常感谢提前

【问题讨论】:

    标签: c# .net list linq c#-4.0


    【解决方案1】:

    您需要先创建List

    public class PayeeContactGroup
     {   
        [JsonProperty("payee_contacts")]    
        public List<PayeeContactDetails> PayeeContact { get; set; } = new List<PayeeContactDetails>();
    
     }
    

    或仅在必要时创建List

    PayeeContactGroup payeeContactDetails = new PayeeContactGroup();
    
    var response = httpClient.GetAsync(uri).Result;
    if (response.IsSuccessStatusCode)
    {
       string data = response.Content.ReadAsStringAsync().Result;
       var payeeContactGroupDetails = JsonConvert.DeserializeObject<PayeeContactGroup>(data);
    
       if(payeeContactGroupDetails.PayeeContact != null && payeeContactGroupDetails.currentPage == 1)
        {
           payeeContactDetails.PayeeContact = payeeContactGroupDetails.PayeeContact.ToList();
        }
        else if(payeeContactGroupDetails.PayeeContact != null && payeeContactGroupDetails.currentPage > 1)
        { 
             if(payeeContactDetails.PayeeContact == null)
             {
                  payeeContactDetails.PayeeContact = new List<PayeeContactDetails>();
             }
             payeeContactDetails.PayeeContact.AddRange(payeeContactGroupDetails.PayeeContact); // error at this line 
        }
          .......
          ......
    } 
    

    【讨论】:

    • 这通常在 JSON 反序列化数据时完成。
    • @IanH。即使该列表没有数据?
    • 被他的代码弄糊涂了,我的错,你是对的,该对象从未分配给反序列化的 JSON 对象。
    • 我需要保留我在第一页中已有的列表.. 但是当我实现您的代码时,我无法在第一页中获得已经添加的列表对象..
    • @EnigmaState 什么是首页?
    【解决方案2】:

    在添加之前先初始化空列表。或者AddRange 方法试图添加到null。这可以在代码中完成:

    PayeeContactGroup payeeContactDetails = new PayeeContactGroup();
    
    payeeContactDetails.PayeeContact = new List<PayeeContactDetails>();
    

    【讨论】:

    • 下次请格式化您的代码。
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2017-08-24
    • 2013-11-07
    • 1970-01-01
    • 2013-08-07
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多