如何将序列化数据读入一组实体类?

时间:2013-05-01 08:10:14

标签: c# .net xml serialization xsd

我被分配了一项任务,将数据库中的参考数据导入到一组实体类中。以下是一个更简单的实体类的示例:

public class CountryList
{
    public CountryList()
    {
        this.Countries = new List<Country>();           
    }

    public IList<Country> Countries { get; private set; }
}

填充XML文件不是我的责任。但是提供模式(XSD文件)以指定所需格式

到目前为止,我已尝试使用[DataContract] / [DataMember]注释所需的类/成员,并使用svcutil使用此命令生成一组XSD文件:

svcutil /t:metadata /dconly MyProject.dll

这会在10个单独的XSD文件中生成大量内容。我找不到一种方法来只指定我感兴趣的实体并减少它们。 (只需要导入一些参考数据,并且有许多实体类不需要在XSD中。)

另一方面,我发现了this article如何从XML文件反序列化。看起来非常简单,但我想知道如何生成此示例中book类的XSD文件?

2 个答案:

答案 0 :(得分:1)

要从类中获取模式,反之亦然,请使用xsd.exe

http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.71).aspx

关于复杂类如何转换为不同的模式,有很多关于如何阅读,但你应该开始使用该工具。

答案 1 :(得分:1)

使用代码生成XSD(而不是使用xsd.exesvcutil.exe),结果更加清晰。以下是我遵循的步骤:

  1. 创建新的控制台应用程序like this,但使用StreamWriter输出到文件而不是控制台。生成的XSD只有我需要的实体,而不是更多。 [DataContract] / [DataMember]属性会导致XSD结构与代码中的名称相同。

  2. 使用Eclipse从XSD like this生成示例XML。

  3. 使用code like this将XML文件反序列化为所需的实体。