Я получаю XML от веб-службы, но она не десериализована так, как я хочу. Я хочу иметь коллекцию элементов Row, где у каждого есть коллекция элементов Value. Однако десериализованный объект захватывает только последний элемент Row в XML. Вот классы:
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class SimpleCodeList
{
[XmlArray("rowField")]
private SimpleCodeListValue[] rowField;
[System.Xml.Serialization.XmlArrayItemAttribute("Value", IsNullable = false)]
public SimpleCodeListValue[] Row
{
get
{
return this.rowField;
}
set
{
this.rowField = value;
}
}
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class SimpleCodeListValue
{
private string simpleValueField;
private string columnRefField;
public string SimpleValue
{
get
{
return this.simpleValueField;
}
set
{
this.simpleValueField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ColumnRef
{
get
{
return this.columnRefField;
}
set
{
this.columnRefField = value;
}
}
}
А вот XML:
<CodeList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="...">
<ColumnSet xmlns="">
<Column Id="code" Use="required">
<ShortName>Code</ShortName>
<Data Type="normalizedString" Lang="en" />
</Column>
<Column Id="name" Use="optional">
<ShortName>Name</ShortName>
<Data Type="normalizedString" Lang="en" />
</Column>
</ColumnSet>
<SimpleCodeList xmlns="">
<Row>
<Value ColumnRef="code">
<SimpleValue>1234</SimpleValue>
</Value>
<Value ColumnRef="name">
<SimpleValue>Service 123</SimpleValue>
</Value>
</Row>
<Row>
<Value ColumnRef="code">
<SimpleValue>5678</SimpleValue>
</Value>
<Value ColumnRef="name">
<SimpleValue>Service 456</SimpleValue>
</Value>
</Row>
...
Может кто-нибудь поправить меня, если мои классы соответствуют данному XML? Спасибо.
Обновление: я использую следующие коды для десериализации xml.
Сначала я преобразовываю строку xml в документ XmlDocument:
XmlDocument xml = new XmlDocument();
xml.LoadXml(responseFromServer);
Затем запустите его с помощью этой функции:
public static T Deserialize<T>(XmlDocument doc)
{
var serializer = new XmlSerializer(typeof(T));
XmlNodeReader reader = new XmlNodeReader(doc);
using (reader)
{
return (T)serializer.Deserialize(reader);
}
}
...
CodeList codelist = Utility.Deserialize<CodeList>(xml);
Изучив XmlDocument, я вижу, что в нем более 100 элементов, но объект 'codelist' содержит только 1 из них.