使用DataContract反序列化字符串数组

时间:2010-06-29 16:15:26

标签: c# arrays datacontract

我有一个xml架构,其类型定义如下:

  <xs:complexType name="InteractiveWorkflowAddress">
    <xs:sequence>
      <xs:element name="endpointAddresses" nillable="true" type="q1:ArrayOfstring" xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
      <xs:element name="instanceId" type="ser:guid" />
    </xs:sequence>
  </xs:complexType>

其中ArrayOfstring类型定义为

  <xs:complexType name="ArrayOfstring">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfstring" nillable="true" type="tns:ArrayOfstring" />

如何使用DataContract属性反序列化InteractiveWorkflowAddress类型?我尝试了以下

[DataContract(Namespace = Constants.Namespace)]
public class InteractiveWorkflowAddress {
    [DataMember()]
    public string[] EndpointAddresses;
    [DataMember()]
    public string InstanceId;
}

但正确地反序列化InstanceId成员时,EndpointAddresses始终为空。

1 个答案:

答案 0 :(得分:0)

了解如何对某些内容进行反序列化的最佳方法是首先进行序列化。序列化InteractiveWorkflowAddress数据结构并查看XML是否已创建。您可以使用List而不是string [] - 并且您还可以使用[XmlArray(...)]和[XmlArrayItem(...)]控制序列化 - 这也可能有所帮助。

这种简单的方法可能会做一些快速的反复试验,通过:进行更改,序列化类,查看输出 - 然后重复。希望有所帮助!