XmlSerializer и XmlArrayItem - PullRequest
       1

XmlSerializer и XmlArrayItem

1 голос
/ 02 декабря 2010

XML выглядит следующим образом:

<Publisher sequence="1" primaryIndicator="Yes">
  <PublisherID idType="Shortname">ysc</PublisherID>
  <PublisherID idType="xy" encrypted="VlsC1V9K23Leo1BAOk6nxxROZAPKSAny" library="http://xys.abc.com">21503</PublisherID>
  <PublisherName nameType="Legal">xys legal name</PublisherName>
</Publisher>

И мой класс отображается как:

type PublisherId() = 
    [<DefaultValue>] val mutable _idType: string ;
    [<DefaultValue>] val mutable _encrypted: string ;
    [<DefaultValue>] val mutable _library: string ;
    [<DefaultValue>] val mutable _value: string ;

    [<XmlAttribute>] member this.idType with get() = this._idType and set(v) = this._idType <- v
    [<XmlAttribute>] member this.encrypted with get() = this._encrypted and set(v) = this._encrypted <- v
    [<XmlAttribute>] member this.library with get() = this._library and set(v) = this._library <- v
    [<XmlTextAttribute>] member this.value with get() = this._value and set(v) = this._value <- v

type Publisher() as this = 
    [<DefaultValue>] val mutable _sequence : int
    [<DefaultValue>] val mutable _primaryIndicator: string ;
    [<DefaultValue>] val mutable _publisherIds : List<PublisherId>

    do
       this._publisherIds <- new List<PublisherId>(); 

    [<XmlAttribute>] member this.sequence with get() = this._sequence and set(v) = this._sequence <- v
    [<XmlAttribute>] member this.primaryIndicator with get() = this._primaryIndicator and set(v) = this._primaryIndicator <- v

    [<XmlArrayAttribute>]
    [<XmlArrayItem(typeof<PublisherId>, ElementName = "PublisherID")>]
    member this.PublisherID with get() = this._publisherIds and set(v) = this._publisherIds <- v

и я также изменил атрибуты члена в рассматриваемом элементе:

    [<XmlArrayItem(typeof<PublisherId>, ElementName = "PublisherID")>]
    member this.PublisherID with get() = this._publisherIds and set(v) = this._publisherIds <- v

Проблема в том, что он не заполняет поля _publisherIds. Я попытался переключиться на массив, и это тоже не помогло. Точка останова в установщике никогда не срабатывает, поэтому я думаю, что с комментариями что-то не так.

Я имел успех с такими структурами, как:

<Publisher sequence="1" primaryIndicator="Yes">
  <PublisherIDs>
     <PublisherID idType="Shortname">ysc</PublisherID>
     <PublisherID idType="xy" encrypted="VlsC1V9K23Leo1BAOk6nxxROZAPKSAny" library="http://xys.abc.com">21503</PublisherID>
   </PublisherIDs>
  <PublisherName nameType="Legal">xys legal name</PublisherName>
</Publisher>

с использованием аналогичных атрибутов (хотя и в c #), однако изменение структуры XML не является опцией ann, поскольку это поступает от поставщика.

Примечание. Я отмечаю как C #, так что эта группа может помочь с аннотациями. Пожалуйста, удалите мои извинения, если это неуместный тег.

Спасибо

1 Ответ

3 голосов
/ 02 декабря 2010

Нашел ответ здесь:

с использованием атрибута XmlArrayItem без XmlArray в классе Serializable C #

Для тех, кто следует дома:

[<XmlElement>] member this.PublisherID with get() = this._publisherIds and set(v) = this._publisherIds <- v 
...