【问题标题】:RESTful - WCF - Object reference not set to an instance of an objectRESTful - WCF - 对象引用未设置为对象的实例
【发布时间】:2016-04-28 02:51:04
【问题描述】:

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

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

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

【问题讨论】:

  • 看起来 target.DocumentLines[0] 或 target.DocumentLines 为空,您尝试过调试吗?
  • 是的,已经做到了。我要做的是将数据设置为 DocumentLines 的 DataMember。

标签: c# wcf rest


【解决方案1】:

看起来你没有初始化这个属性

[DataMember]
public RequestDataDetails[] DocumentLines;

我建议您使用 List 而不是 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();

希望它有效!

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多