2011-02-16 42 views
1

我有大量的对象集合,我需要转换成xml,必须根据给定的XSD进行验证。如何使用提供的xsd模式序列化大量对象?

类结构不是很复杂(aobut 20个属性和子类的两个列表) 即:

public class Person 
{ 
    public string Street, Town, City, PostCode etc; 
    public double Income, Tax, etc.; 
    public List<Account> Accounts; 
    ... 
} 

但预期的XML输出复杂和不匹配的阶级结构

<Person> 
    <Address> 
    <Street/><Town/><City/> 
    </Address> 
    <FinancialData> 
    <Income/><Tax/> 
    </FinancialData> 
    <Accounts> 
    <Account> 
    <No>1</No> 
    ... 
    </Accounts> 
</Person> 

什么是最好的方式来做到这一点?

我试图让的XElement结构为每个对象,然后将它们组合成的XDocument和保存

XElement document = new XElement("Person",    
    new XElement("Address", 
     new XElement("Street", this.Street), 
     new XElement("City", this.City), 
    new XElement("FinancialData", 
     new XElement("Income", this.Income), ... 

但是创建XElements的过程是非常缓慢的,并与200个对象需要几分钟wheras我需要序列50.000对象。

我想过XmlSerializer,但是class和xsd不匹配。

更新: 我创建了自定义类,我将其基类映射到它。然后使用XmlSerializer及其属性,我用xml序列化我的对象。这很快。

回答

0

好了,这的XDocument(Linq2Xml)将是简单的,但...

如何旧数据集? 有2种方式:

  1. 生成在Visual Studio:

    • 添加的XSD C#项目。
    • 打开文件从Solution Explorer中“打开方式”中,选择数据集Editor..yes是...
    • 单击该数据集,并转到属性
    • 集名称为[your_class]和自定义工具设置为MSDataSetGenerator
    • 现在,VS会生成后面的代码。然后你可以在代码中使用生成的类。
  2. 或者,从开始菜单 - > Visual Studio中 - > Visual Studio工具 - > Visual Studio的赞扬提示 有XSD.EXE可以用来生成类。


如果你想使用XmlSerializer的,你可以做一个XslCompiledTransform XML文档从一种格式转换到另一个XSL样式表。

0

我想你可能想考虑使用你选择的模板引擎,例如NHaml。首先,您必须创建一个符合您的架构的XML模板,然后使用模板引擎使用您的实际数据来呈现模板。

在NHaml的情况下,它看起来大约是这样的:

%Person 
    %Address 
    %Street = person.Street 
    %Town = person.Town 
    %City = person.City 
    ... 
    %FinancialData 
    - foreach (var account in person.Accounts) 
    %Account 
     %No 
     = account.No 
     ... 
相关问题