2016-04-28 28 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 []の代わりにリストを作成します。とにかく、内部リストを使用する必要があります。

RequestDataDetailsのリストを、forループの前にクエリから入力するように初期化します。

List<RequestDataDetails> requestDetails = new List<RequestDataDetails> 

その後、それはあなたのニーズに合った場合にだけ教えて、それはあなたが期待するものをやるかどうかわから、代わりにあなたがやっていた割り当てを使用してアレイ、イムを設定するので、そのリストにない追加するforループを変更します。

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

代わりの

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

次にforループ配列にリストを変換し、target

target.DocumentLines = requestDetails.ToArray(); 

に割り当てた後、それが動作することを望みます!

関連する問題