序列化和自动生成的文件

时间:2014-01-08 21:50:43

标签: xml serialization xsd

我正在开发一个使用autogenereted vb类的项目。我想将此类序列化为xml文件。 当我针对我的xsd fil验证我的xml文件时,我收到一个错误:无法找到元素声明'消息'

我的xsd看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xmlns:tera="http://tera.net/xsd/data"
xmlns:ns1="http://tera.net/xsd/Company-dok/note/2010"><xsd:element name="Message" 
type="TestMessage" /><xsd:complexType      
name="TestMessage"><xsd:sequence><xsd:element name="Detail" type="Detail" /> ........

我的xml看起来像:

<?xml version="1.0" encoding="utf-8"?>
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:ska:test:micro:v2">

但它应该是这样的:

<?xml version="1.0" encoding="UTF-8" ?> 
<message xmlns="urn:ska:test:micro:v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="urn:ska:test:micro:v2 test_v2_0.xsd">

我错过了什么?

当我将我的类序列化为xml时,我希望我的elemts属性以给定的顺序出现在我的xml中。如果我自己生成自动生成的文件,我可以解决这个问题。如果我在自动生成的文件中的类中创建属性的顺序,则xml中的属性将以正确的顺序显示。 但我不想更改自动生成的文件,我该怎么办?

我的自制文件的一部分:

<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:ska:test:micro:v2")> _
Partial Public Class Detail

Private NameField As String

Private PhoneField() As Oppgavegiver


'''<remarks/>
Public Property name() As String

End Property



'''<remarks/>
Public Property phone() As integer

End Property

如果我将Phonefield放在nameField和phone属性顶部的name属性之上,我会在xml中获得正确的顺序,但我不想更改sutogenerated文件。

我该怎么做?

提前致谢!

1 个答案:

答案 0 :(得分:0)

错误意味着对于您正在验证的XML,message没有与您显示的XSD匹配的命名空间(因为它没有targetNamespace) 。但是,第一个发布的XML通过messageurn:ska:test:micro:v2元素放入xmlns="urn:ska:test:micro:v2"命名空间,这完全令人困惑,因为您的XSD没有targetNamespace。 “翻译”中有些东西丢失了,所以你应该查看你的帖子。

否则,你似乎在问两件事:

(1)如何将schemaLocation属性添加到生成的XML中。 this post of SO的答案应该为您提供有关如何操作的足够信息(自定义序列化程序或部分类)。

(2)如何确保正确订购颗粒。答案是使用xsd.exe command line中的/order开关。

相关问题