2013-07-01 208 views
0

我有一個方法來調用服務並返回一個響應對象。我需要響應對象中的一些數據。我可以像響應後,通過具有點可以訪問他們:獲得價值

CVAResponse response = new CVAResponse(); 
       response = dataExchange.AddOrder(Username, Password, order); 
       OrderId= response.Data; 

有響應對象某些領域,我需要他們的價值,他們用不可訪問(響應點),他們是不會響應的根當我在調試期間查看響應對象時也是如此。他們是這個名字空間和基地內等:

  • BookClassLibrary.DataService.CVAOrderResponse

    鹼基

我怎樣才能獲得呢? (我試過點響應對象後,但沒有這樣的這件事情)

的CVAResponse類是由另一家公司寫的,當我去定義,是我唯一看到:

public partial class CVAResponse : object,System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { 

    [System.NonSerializedAttribute()] 
    private System.Runtime.Serialization.ExtensionDataObject extensionDataField; 

    [System.Runtime.Serialization.OptionalFieldAttribute()] 
    private string DataField; 

    [System.Runtime.Serialization.OptionalFieldAttribute()] 
    private string ErrorMessageField; 

    [System.Runtime.Serialization.OptionalFieldAttribute()] 
    private BlueBookClassLibrary.DataExchangeService.eCVAResponseStatus StatusField; 

    [System.Runtime.Serialization.OptionalFieldAttribute()] 
    private string TicketIdField; 

    [global::System.ComponentModel.BrowsableAttribute(false)] 
    public System.Runtime.Serialization.ExtensionDataObject ExtensionData { 
     get { 
      return this.extensionDataField; 
     } 
     set { 
      this.extensionDataField = value; 
     } 
    } 

而且我有這個部分類:

 public partial class CVAOrderResponse : BlueBookClassLibrary.DataExchangeService.CVAResponse { 

    [System.Runtime.Serialization.OptionalFieldAttribute()] 
    private string XMLDataField; 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public string XMLData { 
     get { 
      return this.XMLDataField; 
     } 
     set { 
      if ((object.ReferenceEquals(this.XMLDataField, value) != true)) { 
       this.XMLDataField = value; 
       this.RaisePropertyChanged("XMLData"); 
      } 
     } 
    } 
} 

我需要一個XMLDataField的值。或XMLData。

它可以通過使用反射如下解決:

  var properties = response2.GetType().GetProperties(); 


      foreach (var property in properties) 
      { 
       string name = property.Name; 
       object value= property.GetValue(response2, null); 
       if (name == "XMLData") 
        xml = value.ToString(); 

      } 

這加瓦我XMLDATA值。

+1

它說它是一個部分類。也許你正在尋找的定義位於與其匹配的* other * partial類中。 –

+0

哦,謝謝,我從來沒有注意到:我有另一個類可以幫助我的問題。 – Alma

+1

基於調試不是一種方法,它顯示基類 – Sayse

回答

1

可以使用反射(System.Reflection命名空間),像下面這樣(語法可能稍有):

var prop = response.GetType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance); 
foreach (var prop in props) 
{ 
    prop.GetValue(response, null); 
} 

或者使用GetProperty("Name", <bindings>);這將讓你的所有非公共屬性。您可以使用GetFields方法使用類似的方法來嘗試非公共字段。但是,我不相信它可以讓你訪問私人領域。

+0

謝謝反射對我有用。 – Alma