C# 为序列化XML生成XSD

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

目前,我有一个xml文件,看起来像这样


<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";