Как правильно удалить xmln: xsi и xmlns: xsd из сериализации xml - PullRequest
1 голос
/ 16 июля 2010

Вопрос: Я использую сериализуемый класс словаря, найденный на
http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
, для сериализации словаря.
Он отлично работает с примером класса ниже.

<System.Xml.Serialization.XmlRoot("ccl")> _
Public Class ccl
    <System.Xml.Serialization.XmlElement("name")> _
    Public xx As String = ""

    <System.Xml.Serialization.XmlElement("date")> _
    Public yy As String = ""


    '<System.Xml.Serialization.XmlElement("adict")> _
    'Public ww As New SerializableDictionary(Of String, String)

End Class

Но это добавляет,

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance AND xmlns:xsd="http://www.w3.org/2001/XMLSchema?

к тегу

Теперь я исправил это, изменив класс словаря на

       Dim ns As System.Xml.Serialization.XmlSerializerNamespaces = New System.Xml.Serialization.XmlSerializerNamespaces()
        'Add an empty namespace and empty value
        ns.Add("", "")

        If True Then
            valueSerializer.Serialize(writer, value, ns)
        Else
            valueSerializer.Serialize(writer, value)
        End If

, который удаляет эти атрибуты.

Но это также означает, что он не пишет их, если я их укажу. Как я могу добавить эти два пустых пространства имен в класс, используя атрибуты?

Я изменил его на

<System.Xml.Serialization.XmlRoot("ccl", Namespace:="")>

но это, похоже, не работает.

1 Ответ

2 голосов
/ 23 июля 2010

Вот код, который я использую для сериализации в мой объект o

XmlSerializerNamespaces XSN = new XmlSerializerNamespaces();
XSN.Add("", "");
XmlWriterSettings XWS = new XmlWriterSettings();
XWS.OmitXmlDeclaration = true;
StringBuilder XmlStr = new StringBuilder();
XmlSerializer x = new XmlSerializer(o.GetType());
x.Serialize(XmlTextWriter.Create(XmlStr, XWS), o, XSN);
...