我在.NET中调用Web服务操作,它返回带有以下类对象的xml数据:
public partial class data : object, System.ComponentModel.INotifyPropertyChanged {
private object[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("currentRow", typeof(dataCurrentRow), Order=0)]
[System.Xml.Serialization.XmlElementAttribute("deleteRow", typeof(dataDeleteRow), Order=0)]
[System.Xml.Serialization.XmlElementAttribute("insertRow", typeof(dataInsertRow), Order=0)]
[System.Xml.Serialization.XmlElementAttribute("modifyRow", typeof(dataModifyRow), Order=0)]
public object[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
this.RaisePropertyChanged("Items");
}
}
public partial class dataCurrentRow : object, System.ComponentModel.INotifyPropertyChanged {
private object[] columnValueField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("columnValue", Order=0)]
public object[] columnValue {
get {
return this.columnValueField;
}
set {
this.columnValueField = value;
this.RaisePropertyChanged("columnValue");
}
}
从Web服务调用返回Xml:
<QAS_GETQUERYRESULTS_RESP_MSG xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/QAS_GETQUERYRESULTS_RESP_MSG.VERSION_1">
<webRowSet xmlns="http://java.sun.com/xml/ns/jdbc">
<properties>
...
...
</properties>
<metadata>
...
...
</metadata>
<data>
<currentRow>
<columnValue>abc</columnValue>
<columnValue>123</columnValue>
<columnValue>xyz</columnValue>
</currentRow>
<currentRow>
<columnValue>def</columnValue>
<columnValue>456</columnValue>
<columnValue>opq</columnValue>
</currentRow>
</data>
</webRowSet>
</QAS_GETQUERYRESULTS_RESP_MSG>
但是,我不知道如何访问xml值&#34; columnValue&#34;在.NET中使用类对象&#34; data&#34;。请帮助告诉我如何访问这些值。非常感谢!
答案 0 :(得分:1)
没有所有代码都不容易回答,但是您应该能够迭代“Items”集合,检查每个代码的类型。如果您找到一个'typeof(dataCurrentRow)项,那么您应该能够将该对象转换为该类型并访问其属性集合(我希望它是'columnValue'对象的集合。你有吗?另一个部分类中的dataCurrentRow对象,如果你可以发布这个我可以给你一个例子。
编辑 - 您可以使用列值(请注意您需要将对象名称空间更改为与您自己的名称一致) -
var myData = new data();
//populate the data object via your webservice call.
if (myData.Items != null && myData.Items.Length > 0)
{
var currentData = from c in myData.Items where c.GetType() == typeof(ConsoleApplication3.data.dataCurrentRow) select c as ConsoleApplication3.data.dataCurrentRow ;
if (currentData != null && currentData.Count() > 0)
{
foreach (var row in currentData)
{
if(row != null && row.columnValue != null)
Console.WriteLine(row.columnValue);
}
}
}