Я тестирую отправку сложного объекта сообщения через службу WCF и получаю различные ошибки сериализации. Для того чтобы упростить вещи, которые я пытаюсь сократить его просто тестирует DataContractSerializer
, для которого я написал следующий тест основан на коде here:Тестирование DataContractSerializer со строкой
Dim message As TLAMessage = MockFactory.GetMessage
Dim dcs As DataContractSerializer = New DataContractSerializer(GetType(TLAMessage))
Dim xml As String = String.Empty
Using stream As New StringWriter(), writer As XmlWriter = XmlWriter.Create(stream)
dcs.WriteObject(writer, message)
xml = stream.ToString
End Using
Debug.Print(xml)
Dim newMessage As TLAMessage
Dim sr As New StringReader(xml)
Dim reader As XmlReader = XmlReader.Create(sr)
dcs = New DataContractSerializer(GetType(TLAMessage))
newMessage = CType(dcs.ReadObject(reader, True), TLAMessage) 'Error here
reader.Close()
sr.Close()
Assert.IsTrue(newMessage IsNot Nothing)
Однако это получает необычную ошибку у себя на вызов ReadObject
: Unexpected end of file while parsing Name has occurred. Line 1, position 6144
Это ошибка буферизации, но я не вижу, как «ReadToEnd» в строке. Я пробовал использовать MemoryStream
: Dim ms As New MemoryStream(Encoding.UTF8.GetBytes(xml))
и StreamWriter
, но каждый из них пришел с собственными ошибками или несовместим с методом ReadObject
DataContractSerializer
, который принимает множество различных перегрузок.
Обратите внимание, что адаптация кода со страницы MSDN отлично работает, но требует сериализации в файл, однако я хотел бы сериализовать строку и из строки, но я думаю, что мне не хватает чего-то жизненно важного.
Я пропустил что-то очевидное в коде выше?
Так очевидно, и я все время искал не то место. Спасибо –
Добро пожаловать. –