Я сериализую объект в XML, чтобы его можно было передавать между двумя приложениями.
Это работало нормально, пока я не изменил свой класс, чтобы в нем содержался List (of MyCustomType).С тех пор сгенерированный xml был недействительным из-за нового тега
xsi:type="xsd:string"
, который добавляется к каждому «значению» в паре ключ / значение, являющейся частью моего типа.
Недопустимый раздел выглядит следующим образом:
<Value xsi:type="xsd:string">ACA04F47-3765-4C39-A698-C4F5B29B057F</Value>
Редактор XML сообщает мне, что конкретная ошибка:
The prefix "xsi" for attribute "xsi:type"
associated with an element type "Value" is not bound.
Я могу вручную устранить эту ошибку в файле XML, объявив это пространство именна корневом уровне XML-документа, например, так:
<MySpecialClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
....
Итак, мой вопрос: как мне заставить сериализатор .net включить это объявление пространства имен в создаваемый им XML-файл?
Код, который я использую для сериализации, выглядит следующим образом:
Protected Function SerializedClass(obj As MySpecialClass) As String
Try
'serialize the current object as xml and return it as a string
Dim serializer As New NetDataContractSerializer()
Dim stream As New MemoryStream()
serializer.Serialize(stream, obj)
stream.Position = 0
Return System.Text.ASCIIEncoding.ASCII.GetString(stream.ToArray())
Catch ex As Exception
Throw ex
End Try
End Function