如何在序列化对象时生成的xml中控制声明的命名空间?

时间:2012-01-05 17:48:51

标签: .net xml serialization

我将一个对象序列化为XML,以便它可以在两个应用程序之间传递。

这很好用,直到我修改了我的类,其中包含一个List(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 :(得分:0)

在类级别,可以使用XmlRootAttribute来装饰对象,您可以使用它来定义命名空间。

要查找更多信息,请查看MSDN Documentation for XmlRootAttribute