我将一个对象序列化为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
答案 0 :(得分:0)
在类级别,可以使用XmlRootAttribute
来装饰对象,您可以使用它来定义命名空间。
要查找更多信息,请查看MSDN Documentation for XmlRootAttribute。