我创建了这个 XSD 文件并将其命名为 Envelope.xsd...
<w3:schema xmlns:w3="http://www.w3.org/2001/XMLSchema">
<w3:element name="Envelope">
<w3:complexType>
<w3:sequence>
<w3:element name="Unit">
<w3:complexType>
<w3:sequence>
<w3:element name="EncryptedData">
<w3:complexType>
<w3:sequence>
<w3:element name="KeyInfo">
<w3:complexType>
<w3:sequence>
<w3:element name="KeyName" type="w3:string" />
</w3:sequence>
</w3:complexType>
</w3:element>
</w3:sequence>
</w3:complexType>
</w3:element>
</w3:sequence>
</w3:complexType>
</w3:element>
</w3:sequence>
</w3:complexType>
</w3:element>
</w3:schema>
然后,我在 xsd.exe(Visual Studio 附带)中使用此命令来生成我的 C# 代码文件...
xsd.exe /c Envelope.xsd
然后,在我的代码中,我创建了一个名为
MyEnvelope的新
Envelope
对象,并使用此代码对其进行序列化...
var serializer = new XmlSerializer(typeof(Envelope));
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("", "");
var writer = new StringWriter();
serializer.Serialize(writer, MyEnvelope, namespaces);
var MyEnvelopeSerialized = writer.ToString();
这就是生成的序列化信封(即 MyEnvelopeSerialized)的样子...
<Envelope>
<Unit>
<EncryptedData>
<KeyInfo>
<KeyName>MyValue</KeyName>
</KeyInfo>
</EncryptedData>
</Unit>
</Envelope>
现在是重要的部分。相反,我必须使输出看起来完全像这样......
<Envelope>
<Unit>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>MyValue</KeyName>
</KeyInfo>
</EncryptedData>
</Unit>
</Envelope>
如何修改 Envelope.xsd 文件,以便当 xsd.exe 解析它并生成 C# 代码文件时,XmlSerializer 会将“xmlns...”属性添加到
<EncryptedData>
和 <KeyInfo>
标签?
请尝试以下 XSD。
XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xmldsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xmlenc="http://www.w3.org/2001/04/xmlenc#">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig.xsd"/>
<xs:import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="xmlenc.xsd"/>
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element ref="Unit"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Unit">
<xs:complexType>
<xs:sequence>
<xs:element ref="xmlenc:EncryptedData"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>