返回Datacontract中的struct数组

时间:2013-05-23 20:23:17

标签: c# arrays wcf struct datacontract

我需要在Datacontract中返回一个结构数组。我无法成功。设置数组的值时收到错误。

这是Datacontract声明:

    [DataContract] 
    public class invoice_data
    {
        [DataMember]
        public Invoice_Body_Item[] invoice_body;
    }


    [StructLayout(LayoutKind.Sequential)]
    public struct Invoice_Body_Item
    {
        public string Item_Description;
        public decimal Item_Value;
    }
}

这是方法代码:

invoice_data Invoice = new invoice_data();
object tr_bl = svr.GetInvoiceData(inputparams.ck, svr.Confirm(inputparams.ck));

for (int i = ((Array)(((object[])(tr_bl))[1])).GetLowerBound(0); i <= ((Array)(((object[])(tr_bl))[1])).GetUpperBound(0); i++)
{
    Invoice.invoice_body[i].Item_Description = (string)((object[])(((object[])(((object[])(tr_bl))[1]))[i]))[0];
    Invoice.invoice_body[i].Item_Value = (decimal)((object[])(((object[])(((object[])(tr_bl))[1]))[i]))[1]; 
}
                        }

在此行中,我收到错误“对象引用未设置为对象的实例。”

Invoice.invoice_body[i].Item_Description = (string)((object[])(((object[])(((object[])(tr_bl))[1]))[i]))[0];

1 个答案:

答案 0 :(得分:1)

你的结构也应该用[DataContract] +装饰它的成员[DataMember]

[StructLayout(LayoutKind.Sequential)]
[DataContract]
public struct Invoice_Body_Item
{
    [DataMember]
    public string Item_Description;
    [DataMember]
    public decimal Item_Value;
}

或者,您可以使用[KnownTypeAttribute(typeof(Invoice_Body_Item))]