RESTful - WCF - 未将对象引用设置为对象的实例

时间:2016-04-28 02:51:04

标签: c# wcf rest

我在WCF(c#)中创建了一个简单的RESTful应用程序。当我使用(GET)填充时,我收到了此错误

  

"对象引用未设置为对象的实例"。

我收到 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(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; }
}

这是我的DataContract源代码:

{{1}}

1 个答案:

答案 0 :(得分:2)

您似乎没有初始化此属性

[DataMember]
public RequestDataDetails[] DocumentLines;

我建议您使用List而不是RequestDataDetails [],因为无论如何您必须使用内部列表。

在for循环之前初始化RequestDataDetails列表以从查询中填充它。

List<RequestDataDetails> requestDetails = new List<RequestDataDetails>

然后更改for循环以添加到该列表而不是设置数组,即时通讯使用您正在执行的任务,不确定它是否符合您的预期,只需告诉我它是否符合您的需求。< / p>

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

而不是

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

然后在for循环之后将列表转换为数组并将其分配给target

target.DocumentLines = requestDetails.ToArray();

希望它有效!