[英]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: 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>
After deserialization, xmlSerializer
creates an object only with element FieldTypes
and the last element of Position
.反序列化后, xmlSerializer
仅使用元素FieldTypes
和 Position 的最后一个元素Position
。 I think XmlSerializer
has a problem with the nested Array(PositionField[][] Position)
and can't deserialize all Position
array elements.我认为XmlSerializer
嵌套Array(PositionField[][] Position)
存在问题,无法反序列化所有Position
数组元素。 Here is part of my C#
object class, which I'm using for deserialization:这是我用于反序列化的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;
}
}
}
For creating this class, I've used the "Paste special" function of Visual Studio.为了创建这个 class,我使用了 Visual Studio 的“Paste special”function。 But also with the svcutil
tool I get same problem.但是使用svcutil
工具我也遇到了同样的问题。
I've solved the problem.我已经解决了这个问题。 I should edit automatically generated proxy client class.我应该编辑自动生成的代理客户端 class。 I've replaced all nested arrays [][]
with List<T>
and serialization works again.我已经用List<T>
替换了所有nested arrays [][]
并且序列化再次起作用。 here's example:这是示例:
wrong generated part of code:错误生成的部分代码:
private PositionField[][] positionField;
public PositionField[][] Position
{
get
{
return this.positionField;
}
set
{
this.positionField = value;
}
}
edited part of code:编辑部分代码:
private List<PositionField> positionField;
public List<PositionField> Position
{
get
{
return this.positionField;
}
set
{
this.positionField = value;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.