C# 为序列化XML生成XSD
目前,我有一个xml文件,看起来像这样C# 为序列化XML生成XSD,c#,xml,xml-serialization,C#,Xml,Xml Serialization,目前,我有一个xml文件,看起来像这样 <ArrayOfService> <Service> <Name> Something </Name> <Id> 8003 </Id> </Service> </ArrayOfService> public class Servi
<ArrayOfService>
<Service>
<Name>
Something
</Name>
<Id>
8003
</Id>
</Service>
</ArrayOfService>
public class Service{
public string Name;
public int Id;
public Service(){
}
}
要将类转换为XML,我使用
XmlSerializer xs = new XmlSerializer( typeof(Service) );
xs.Serialize( context.Response.OutputStream, FunctionReturnsTypeService() );
有没有办法自动生成这样的XSD
编辑:
另外,在序列化xml时,是否有任何方法将此架构添加到xml中?xsd.exe工具(%netsdk20%\bin\xsd.exe)从xml文档推断类型
(您还可以使用/c选项从xml文档或架构生成类。)
如果要将对架构的引用嵌入到XML文档中,请参见此处:
总结:使用XmlAttribute属性修饰类型的成员,指定“schemaLocation”作为attr的名称,并指定“”作为该属性的命名空间。如C中的示例所示#
XSD工具可以工作,但/c选项(用于生成类)不能工作。我刚刚输入了xsd myfile.xml,它生成了模式。令人惊叹的。现在,关于我问题的第二部分d对于动态模式生成,字段xsiSchemaLocation需要是公共的。将此模式添加到XML是什么意思?您希望输出看起来像什么,包含什么?我希望生成的xml顶部有类似的内容:“>xmlns=“foo”表示名称空间,而不是模式。如果您希望在序列化类型时使用特定的xml名称空间,则可以使用[XmlType(namespace=“foo”)]作为类型的一个属性。我想您可能需要的是xsi:schemaLocation,在这种情况下,请参见此处:将该链接添加到您的答案,我会接受它。看起来像我需要的。
[System.Xml.Serialization.XmlAttributeAttribute("schemaLocation",
Namespace = System.Xml.Schema.XmlSchema.InstanceNamespace)]
private string xsiSchemaLocation = "YourSchema.xsd";