2010-06-29 4 views
1

У меня есть XML-схемы с типом определенным, как это:Deserialize массив строк с DataContract

<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" /> 

Как я могу десериализации InteractiveWorkflowAddress типа используя атрибут DataContract? Я пробовал следующий

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

Но пока InstanceId член правильно десериализации, EndpointAddresses всегда нуль.

ответ

0

Лучший способ выяснить, как что-то можно десериализовать, это сначала сериализовать. Сериализуйте структуру данных InteractiveWorkflowAddress и увидите, что XML создается. Возможно, вы можете использовать List вместо строки [], а также вы можете управлять сериализацией с помощью [XmlArray (...)] и [XmlArrayItem (...)] - что тоже может помочь.

Простой способ, скорее всего, будет выполнять некоторые быстрые пробные ошибки: путем внесения изменений, сериализации класса, просмотра результата, а затем повторения. Надеюсь, это поможет!

+0

Идея сериализации действительно хороша; но XmlArray и XmlArrayItem должны иметь какое-то значение при десериализации с помощью DataContractSerializer? Не следует ли использовать атрибут DataContractCollection? –

Смежные вопросы