2016-04-28 127 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(); 

希望工程!

相关问题