C# 返回Datacontract中结构的数组
我需要返回Datacontract中的结构数组。我做不到。我在设置数组值时收到一个错误 以下是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]
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;
}