C# 为分层数据创建XSD

C# 为分层数据创建XSD,c#,.net,xml,xsd,C#,.net,Xml,Xsd,我想将对象导出为XML并创建XSD。下面是基类 class Owner { private int id; private string name; private List<Car> cars; private int age; } class CarTemplate { private int drive; private double engineCc; } class Car { private int id;

我想将对象导出为XML并创建XSD。下面是基类

class Owner
{
    private int id;
    private string name;
    private List<Car> cars;
    private int age;
}

class CarTemplate
{
    private int drive;
    private double engineCc;
}

class Car
{
    private int id;
    private string name;
    private double cost;
    private CarTemplate template;
}
类所有者
{
私有int-id;
私有字符串名称;
私家车名单;
私人互联网;
}
类笛卡尔模板
{
私家车;
私人双引擎ECC;
}
班车
{
私有int-id;
私有字符串名称;
私人双重成本;
私有模板模板;
}
下面是我想要导出为XML并从中创建XSD的修改后的结构

class ExportedOwner
{
    private int id;
    private string name;
    private List<Car> cars;
}

class ExportedCar
{
    private string name;
    private double cost;
    private CarTemplate template;
}
类导出所有者
{
私有int-id;
私有字符串名称;
私家车名单;
}
出口汽车
{
私有字符串名称;
私人双重成本;
私有模板模板;
}
XML的结构应采用以下格式

<?xml version="1.0" encoding="utf-8" ?>
<Owner>
    <id>1</id>
    <Name>John</Name>
    <Age>49</Age>
    <Cars>
        <Car>
            <id>1</id>
            <Name>Merc Class C</Name>
            <CarTemplate>
                <drive>2</drive>
                <engineCc>2500</engineCc>
            </CarTemplate>
        </Car>
        <Car>
            <id>2</id>
            <Name>Merc Class M</Name>
            <CarTemplate>
                <drive>4</drive>
                <engineCc>2900</engineCc>
            </CarTemplate>
        </Car>
    </Cars>
</Owner>

1.
约翰
49
1.
美世C级
2.
2500
2.
美塞梯M级
4.
2900

如何为XML格式创建XSD。我需要XSD将XML文件导入回应用程序。

如果您想从类中动态生成XML,可以使用
System.Reflection

例如:

Type type = typeof(ExportedOwner);

var propertyinfos = type.GetProperties(); // gives you a list of all properties of ExportedOwner

然后使用您喜爱的XML编写器根据您的规范生成XML。

使用XSD.EXE生成XSD:这是一个标准的.NET Framework工具。请参阅以了解它是如何使用的。

您可以使用标准XML序列化程序(与xsd.exe一起使用)。您需要在基类上使用KnownTypeAttribute,以便反序列化的对象知道如何重新水化该结构


这里有两个不同的问题需要回答

首先,如何将对象导出到XML文件。在.NET中有很多方法可以实现这一点。本文将并排比较两种最常见的(XmlSerializer和DataContractSerializer)


你问题的第二部分要宽泛一点。从现有XML文件生成xsd模式并不是一门精确的科学,但是有一些工具可以从XML文件推断(或猜测)模式。有各种各样的小工具可以帮你做到这一点-也许值得尝试其中的一些,看看哪一个能给你最好的结果。和往常一样,:)

Hm,没错-我一定是把这个工具和我使用的另一个插件搞混了。奇怪-我发誓它是这么叫的。是的,就是这样!但无法再找到加载项:)。它与Windows SDK捆绑在一起!C:\Program Files\Microsoft SDK\Windows\v7.0A\Bin\xsd.exe