Datacontract에서 구조체 배열을 반환해야합니다. 나는 그것을 할 수 없다. 배열 값을 설정할 때 오류가 발생합니다.WCF 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];
해결. 모든 도움에 감사드립니다. 나는 다음과 같이 변경했다 :
public Invoice_Body_Item[] fill_invoice_body(object tr_bl)
{
Invoice_Body_Item[] temp = new Invoice_Body_Item[40];
for (int i = 0; i <= ((Array)(((object[])(tr_bl))[1])).GetUpperBound(0); i++)
{
temp[i].Item_Description = (string)((object[])(((object[])(((object[])(tr_bl))[1]))[i]))[0];
temp[i].Item_Value = (decimal)((object[])(((object[])(((object[])(tr_bl))[1]))[i]))[1];
}
return temp;
}
다음으로 전화를
Invoice.invoice_body = fill_invoice_body(tr_bl);
캐스팅 량이 문제 일 수 있다고 생각합니다. 코드를 단순화하십시오. – Romoku
이 코드에는 괄호 안의 단어가 있습니다. –
고맙지 만 실제로는 물체의 형변환을 단순화하는 방법을 모른다. "TEST"와 같은 간단한 문자열에 대한 캐스트를 바꾸면 오류가 계속 나타납니다. – user2386560