サービスを呼び出して応答オブジェクトを返すメソッドがあります。応答オブジェクトにいくつかのデータが必要です。次のような応答の後にドットを付けることで、それらにアクセスできます。
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 値が得られました。