获得价值

时间:2013-07-01 16:21:16

标签: c#

我有一个方法来调用服务并返回一个响应对象。我需要响应对象中的一些数据。我可以通过在响应之后使用点来访问它们,如:

  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();

            }

这是gava me XMLData值。

1 个答案:

答案 0 :(得分:1)

您可以使用Reflection(System.Reflection命名空间),类似于以下内容(语法可能稍微偏离):

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

或者使用GetProperty("Name", <bindings>);这将为您提供所有非公共属性。您可以使用与GetFields方法类似的方法尝试非公共字段。但是,我认为它不允许您访问私有字段。