2011-09-20 49 views
1

我已經寫了一個類(下面的代碼片段),其中有一些數據成員,我把數據從客戶端。我應該通過Web服務發送這些數據,其中包括我的數據成員的類,但是有更多的數據成員表示我的類。不同類型的Cast對象

我應該從我的類型轉換爲另一種類型。

問題是我不知道如何訪問數據成員從中獲取數據。

我所有的數據到這個對象 「OBJ」:

__XtraInvoiceInfo OBJ = new __XtraInvoiceInfo(); 

和Web服務的類型是 「InvoiceWithEntriesInfo」

var convertedObj = new InvoiceWithEntriesInfo() 
      { 
       invoiceNumber = OBJ.BasicInfo.InvoiceNumber --> member is not access. 
              | Equals 
        Visual Studio suggests | GetHashCode 
        only these methods  | GetType 
              | ToString 

       invoiceDate = OBJ.BasicInfo.InvoiceDate *--> member is not accessible 
       firstName = OBJ.Payer.FirstName *-->> not accessible 
       lastName = OBJ.Payer.LastName *-->> not accessible      
       catem = OBJ.Payer.Catem *-->> not accessible 
      }; 

錯誤 「成員無法訪問」 是指* - >'object'不包含'InvoiceDate'的定義,並且沒有可以找到接受'object'類型的第一個參數的擴展方法'InvoiceDate'(你缺少using指令還是程序集引用?)

public sealed class __XtraInvoiceInfo 
{ 
    private long _payerType = -1; 

    public long PayerType 
    { 
     get 
     { 
      return this._payerType; 
     } 
     set 
     { 
      this._payerType = value; 

      if (value == Constants.NATURAL_PAYER) 
      { 
       this.Payer = new __NaturalInvoiceInfo(); 
      }     
     } 
    } 

    public object Payer 
    { 
     get; set; 
    } 

    public object BasicInfo 
    { 
     get; set; 
    } 


    //-- Nested Types -- 
    public sealed class __NaturalInvoiceInfo 
    {   
     public string FirstName 
     { 
      get; set; 
     } 

     public string LastName 
     { 
      get; set; 
     } 

     public long Catem 
     { 
      get; set; 
     } 
    } 

    public sealed class __BasicInvoiceInfo 
    { 
     public long InvoiceNumber 
     { 
      get; set; 
     } 

     public DateTime? InvoiceDate 
     { 
      get; set; 
     } 
    } 

}

我因爲通過他們提出的屬性付款人和BasicInfo我從客戶端的數據和我犯了一個subbinding到我的會員像這樣:

model.BindModel(xii => 
      { 
       var bindModel = new ValidationFrameBindModel<__XtraInvoiceInfo.__BasicInvoiceInfo>(); 

       this.BindControls(bindModel); 

       model.BindModel<__XtraInvoiceInfo.__BasicInvoiceInfo>((x,b) => x.BasicInfo = b, bindModel); 
      }); 

太謝謝你了!如果你有權力回答我的問題。 如果需要,我已準備好提供更多詳細信息。

回答

2

嗯,這就是問題所在:

public object Payer { get; set; } 
public object BasicInfo { get; set; } 

你只是聲明屬性爲object型的 - 爲什麼不給他們更多有用的類型?如果你不知道類型,你怎麼知道哪些屬性會在那裏?你可以創建抽象基類或接口來聲明所有你想保證的屬性嗎? (這是相當很難告訴你正在試圖做的,什麼是誠實的)

如果您正在使用C#4和.NET 4,你可以只是讓他們動態:

public dynamic Payer { get; set; } 
public dynamic BasicInfo { get; set; } 

然後訪問子屬性將在執行時綁定對象的實際類型。

請注意,請不要在__前加上類型名稱 - C#規範使用__爲編譯器特有的功能保留標識符。來自第2.4.2節:

包含兩個連續下劃線字符(U + 005F)的標識符被保留供實施使用。例如,一個實現可能會提供以兩個下劃線開頭的擴展關鍵字。

+0

我使用.NET 3.5 ... – meorfi

+1

@meorfi:好的,所以你需要弄清楚如何指定一個合適的類型來公開你需要的屬性。 –

+0

和,謝謝你的回答和「旁註」@Jon :) – meorfi