Проблема с использованием ReadAsDataContract с использованием WCF REST Toolkit - PullRequest
0 голосов
/ 22 августа 2011

Я новичок в сериализации и столкнулся с проблемой.У меня есть служба REST, которая возвращает массив объектов IDDescriptionPair.При использовании сервиса я использую надстройку VS «Вставить XML как типы» для создания объекта.Я только изменяю этот объект, чтобы добавить атрибут DataContract, чтобы мои пространства имен совпадали на каждом конце.Вот этот объект:

Imports System.Runtime.Serialization

<DataContract([Name]:="IDDescriptionPair", [Namespace]:="http://schemas.datacontract.org/2004/07/Blizzard.ClassLibrary")>
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225"), _
 System.Diagnostics.DebuggerStepThroughAttribute(), _
 System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://schemas.datacontract.org/2004/07/Blizzard.ClassLibrary"), _
 System.Xml.Serialization.XmlRootAttribute   ([Namespace]:="http://schemas.datacontract.org/2004/07/Blizzard.ClassLibrary", IsNullable:=True)> _
Partial Public Class IDDescriptionPair

  Private descriptionField As String

  Private idField As Integer

  Private idFieldSpecified As Boolean

  '''<remarks/>
  <System.Xml.Serialization.XmlElementAttribute(IsNullable:=True)> _
  Public Property Description() As String
    Get
      Return Me.descriptionField
    End Get
    Set(value As String)
      Me.descriptionField = value
    End Set
  End Property

  '''<remarks/>
  Public Property ID() As Integer
    Get
      Return Me.idField
    End Get
    Set(value As Integer)
      Me.idField = value
    End Set
  End Property

  '''<remarks/>
  <System.Xml.Serialization.XmlIgnoreAttribute()> _
  Public Property IDSpecified() As Boolean
    Get
      Return Me.idFieldSpecified
    End Get
    Set(value As Boolean)
      Me.idFieldSpecified = value
    End Set
  End Property
End Class

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

Вот код, где я использую службу:

Dim client As New HttpClient()
Dim endpoint As New Uri("http://bmpscnt410a/services/v1/personservices/offices/5/principals")

Using response As HttpResponseMessage = client.Get(endpoint)
  response.EnsureStatusIsSuccessful()

  Dim idp As List(Of IDDescriptionPair)
  Try
    idp = response.Content.ReadAsDataContract(Of List(Of IDDescriptionPair))()
  Catch ex As Exception
  End Try
End Using

Я пытался использовать DataContractSerializer напрямую, ноЯ получаю тот же результат (что, я думаю, ожидается).Любые идеи будут оценены.

1 Ответ

1 голос
/ 23 августа 2011

Типом, который вы используете, является тип XmlSerializer (аннотированный атрибутами из пространства имен System.Xml.Serialization, такими как <XmlType()>, <XmlRoot()> и т. Д.). Для этого вам нужно будет использовать XmlSerializer для десериализации этого. Если вы включаете (импортируете) пространство имен System.Xml.Serialization, вы должны получить методы расширения ReadAsXmlSerializable, которые вы должны использовать для десериализации ответа.

...