[英]How to deserialize a nested Array from xml to c# object?
I'm trying deserialize the following soap xml
response from my web service to a C#
object:
<?xml version="1.0" encoding="utf-16"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<ns2:ExportPositionsQueryResponse xmlns:ns2="http://ns" xmlns:ns3="http://nscpm/datatypes/schema/v2011_06_01" xmlns="http://nscpmexportvalue/schema/v2011_06_01">
<ns2:Positions>
<FieldTypes>
<FieldType ExtId="PF_NAME" Type="string"></FieldType>
<FieldType ExtId="POSITION_QUANTITY" Type="double"></FieldType>
<FieldType ExtId="INST_NAME" Type="string"></FieldType>
<FieldType ExtId="INST_TYPE" Type="string"></FieldType>
<FieldType ExtId="POSITION_TYPE" Type="string"></FieldType>
<FieldType ExtId="POSITION_CLASS" Type="string"></FieldType>
</FieldTypes>
<Position>
<Field ExtId="INST_NAME" Value="name"></Field>
<Field ExtId="INST_TYPE" Value="asd"></Field>
<Field ExtId="PF_NAME" Value="ads"></Field>
<Field ExtId="POSITION_CLASS" Value="asd"></Field>
<Field ExtId="POSITION_TYPE" Value="asd"></Field>
<Field ExtId="POSITION_QUANTITY" Value="asd"></Field>
</Position>
<Position>
<Field ExtId="INST_NAME" Value="asd"></Field>
<Field ExtId="INST_TYPE" Value="asd"></Field>
<Field ExtId="PF_NAME" Value="asd"></Field>
<Field ExtId="POSITION_CLASS" Value="ads"></Field>
<Field ExtId="POSITION_TYPE" Value="NORMAL"></Field>
<Field ExtId="POSITION_QUANTITY" Value="asd"></Field>
</Position>
<Position>
</ns2:Positions>
</ns2:ExportPositionsQueryResponse>
</soap:Body>
</soap:Envelope>
反序列化后, xmlSerializer
僅使用元素FieldTypes
和 Position 的最后一個元素Position
。 我認為XmlSerializer
嵌套Array(PositionField[][] Position)
存在問題,無法反序列化所有Position
數組元素。 這是我用於反序列化的C#
object class 的一部分:
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://ns")]
public partial class ExportPositionsQueryResponsePositions
{
private FieldTypesFieldType[] fieldTypesField;
private PositionField[][] positionField;
[System.Xml.Serialization.XmlArrayAttribute(Namespace = "http://ns")]
[System.Xml.Serialization.XmlArrayItemAttribute("FieldType", IsNullable = false)]
public FieldTypesFieldType[] FieldTypes
{
get
{
return this.fieldTypesField;
}
set
{
this.fieldTypesField = value;
}
}
[System.Xml.Serialization.XmlArray(ElementName ="Position",Namespace = "http://ns")]
[System.Xml.Serialization.XmlArrayItem("Field", typeof(PositionField[]), IsNullable = false)]
public PositionField[][] Position
{
get
{
return this.positionField;
}
set
{
this.positionField = value;
}
}
}
為了創建這個 class,我使用了 Visual Studio 的“Paste special”function。 但是使用svcutil
工具我也遇到了同樣的問題。
我已經解決了這個問題。 我應該編輯自動生成的代理客戶端 class。 我已經用List<T>
替換了所有nested arrays [][]
並且序列化再次起作用。 這是示例:
錯誤生成的部分代碼:
private PositionField[][] positionField;
public PositionField[][] Position
{
get
{
return this.positionField;
}
set
{
this.positionField = value;
}
}
編輯部分代碼:
private List<PositionField> positionField;
public List<PositionField> Position
{
get
{
return this.positionField;
}
set
{
this.positionField = value;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.