Как я могу контролировать объявленные пространства имен в xml, сгенерированном при сериализации объекта? - PullRequest
0 голосов
/ 05 января 2012

Я сериализую объект в 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

1 Ответ

0 голосов
/ 05 января 2012

На уровне класса можно украсить ваш объект с помощью XmlRootAttribute, который вы можете использовать для определения пространства имен.

Чтобы найти больше информации, посмотрите документацию MSDN для XmlRootAttribute .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...