C# 返回Datacontract中结构的数组

C# 返回Datacontract中结构的数组,c#,arrays,wcf,struct,datacontract,C#,Arrays,Wcf,Struct,Datacontract,我需要返回Datacontract中的结构数组。我做不到。我在设置数组值时收到一个错误 以下是Datacontract声明: [DataContract] public class invoice_data { [DataMember] public Invoice_Body_Item[] invoice_body; } [StructLayout(LayoutKind.Sequential)] public

我需要返回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]; 
}
                        }

您的结构还应该使用
[DataContract]
+装饰它的成员,使用
[DataMember]

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

或者,您可以使用
[KnownTypeAttribute(typeof(Invoice\u Body\u Item))]

您的GetInvoiceData方法是什么样子的?GetInvoiceData是一个从COM对象返回发票结构(tr\u bl)的方法,那么,为什么不使用从COM方法返回的结构呢,有几个“部分”,如发票头、发票正文、发票明细等。我需要在WCF服务中传递所有这些结构。我对C#很陌生,有没有一种方法可以直接通过tru bl而不用使用[DataContract]和[Datamember]声明整个结构???例如,发票主体必须包含项目(说明和值),并且可以返回的值数量为n,例如:项目a,5.00;B项,10.50;项目C,2.40;等等,@user2386560疯狂的想法……为什么你要传递一个非托管对象,为什么你不把你需要的数据提取到一个托管对象中,然后传递呢?……也许甚至可以解释为什么你会得到空引用例外。我已经尝试过[DataContract]和[DataMember]了,但我仍然在“Invoice.Invoice\u body”行上得到了相同的错误[i] .Item_Description=(string)((object[])((object[])((object[])((tr_bl))[1]))[i])[0];”。我应该在哪里使用[KnownTypeAttribute(typeof(Invoice_Body_Item))??确实感谢您的帮助。您可以将这一行尽可能多地分隔成几行,以查看它在哪个确切位置失败吗?这部分:(string)((object[])((object[])((object[]))(((对象[])(tr_bl))[1])[i])[0]工作正常。尝试设置“发票.发票正文[i].项目描述”的值时失败你100%确定在收到请求时发送了一个数组吗?你调试了吗?你看到返回的对象了吗?你是否尝试查看端点之间传递的xml?是的,我从tr_bl获得了一个数组。只是为了检查它,我添加了一些跟踪,并查看了值。问题是当我尝试将这些值传递给发票bod时invoice_数据类的y datamember。例如,我没有发布另一个结构,称为invoice_header,它有30个字段,但不是数组,我对此没有任何问题。我在数组中遇到此错误。可能是我缺少声明的某个内容。
[StructLayout(LayoutKind.Sequential)]
[DataContract]
public struct Invoice_Body_Item
{
    [DataMember]
    public string Item_Description;
    [DataMember]
    public decimal Item_Value;
}