2016-04-28 31 views
1

我在WCF(c#)中創建了一個簡單的RESTful應用程序。當我使用(GET)填充時,我收到此錯誤RESTful - WCF - 對象引用未設置爲對象的實例

「對象引用未設置爲對象的實例」。

我收到了target.DocumentLines[0].itemCode = "";部分的錯誤。

這裏是我的代碼:

 public PRRequestData[] getAllPR() 
    { 
     List<PRRequestData> list = new List<PRRequestData>(); 

     try 
     { 
      string sqlSelect = "SELECT DocEntry, Comments, ReqDate FROM OPRQ"; 
      APP.strCommand = sqlSelect; 
      DataTable dt = new DataTable(); 

      dt = APP.Ds.Tables[0]; 

      foreach (DataRow row in dt.Rows) 
      { 
       // Person target = Activator.CreateInstance(); 
       PRRequestData target = new PRRequestData(); 
       target.requiredDate = row["ReqDate"].ToString(); 
       target.remarks = row["Comments"].ToString(); 
       target.docEntry = row["DocEntry"].ToString(); 
       // DataColumnAttribute.Bind(row,target); 

       sqlSelect = "SELECT ItemCode, Quantity, Price, VendorNum, TaxCode FROM PRQ1 WHERE DocEntry = '" + row["DocEntry"].ToString() + "' "; 
       APP.strCommand = sqlSelect; 
       for (var i = 0; i < APP.Ds.Tables[0].Rows.Count; i++) 
       { 
        target.DocumentLines[0].itemCode = ""; 

       } 

       list.Add(target); 
      } 

      return list.ToArray(); 
     } 
     catch (Exception e) 
     { 
      e.ToString(); 
     } 

     return list.ToArray(); 

這裏是我的DataContract源代碼也:

[DataContract(Namespace = "")] 
public class PRRequestData 
{ 
    [DataMember] 
    public string docEntry { get; set; } 

    [DataMember] 
    public string remarks { get; set; } 

    [DataMember] 
    public string requiredDate { get; set; } 

    //[DataMember] 
    //public int rowcount { get; set; } 

    [DataMember] 
    public RequestDataDetails[] DocumentLines; 
} 

[DataContract] 
public class RequestDataDetails 
{ 
    [DataMember] 
    public string itemCode { get; set; } 

    [DataMember] 
    public decimal quantity { get; set; } 

    [DataMember] 
    public decimal price { get; set; } 

    [DataMember] 
    public string supplier { get; set; } 

    [DataMember] 
    public string taxcode { get; set; } 
} 
+0

看起來像是target.DocumentLines [0]或target.DocumentLines爲空,您是否嘗試過調試? –

+0

是的,已經做到了。我想要做的是將數據設置爲DocumentLines的DataMember。 –

回答

2

貌似你不初始化這個屬性

[DataMember] 
public RequestDataDetails[] DocumentLines; 

我建議你使用列表而不是RequestDataDetails [],因爲無論如何你必須使用內部列表。

在for循環之前初始化RequestDataDetails的列表以便從查詢中填充它。

List<RequestDataDetails> requestDetails = new List<RequestDataDetails> 

然後改變for循環添加到列表,而不是使用你在做任務,不知道設置一個數組,即時通訊,如果它會做你期待什麼,只是告訴我,如果它適合你的需要。

requestDetails.add(new RequestDataDetails { itemCode = "" }); 

代替

target.DocumentLines[0].itemCode = ""; 

然後後for循環的列表轉換爲一個數組,並將其分配給target

target.DocumentLines = requestDetails.ToArray(); 

希望工程!

相關問題