我正在尝试将以下soap xml
响应从我的Web服务反序列化为C#
对象:
<?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
创建对象。我认为XmlSerializer
嵌套Array(PositionField[][] Position)
有问题,无法对所有Position
数组元素进行反序列化。这是我用于反序列化的C#
对象类的一部分:
[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;
}
}
}
为了创建此类,我使用了Visual Studio的“特殊粘贴”功能。但是,使用svcutil
工具也会遇到同样的问题。
我已经解决了问题。我应该编辑自动生成的代理客户端类。我已经用List <>