我有大量的对象需要转换为xml,必须根据给定的XSD进行验证。
类结构不是很复杂(20个属性和2个子类列表) 即:
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个对象需要几分钟时间才能序列化50.000个对象。
我想过XmlSerializer,但是class和xsd不匹配。
更新: 我创建了自定义类,我将基类映射到它。然后使用XmlSerializer及其属性我在xml中序列化我的对象。这很快。
答案 0 :(得分:0)
嗯,这个XDocument(Linq2Xml)很简单但是......
旧的DataSet怎么样? 有两种方式:
在Visual Studio中生成:
或者,从“开始”菜单 - &gt; Visual Studio - &gt; Visual Studio工具 - &gt; Visual Studio推荐提示 有XSD.EXE,可以用来生成类。
如果你想使用XmlSerializer,你可以制作一个XslCompiledTransform,用xsl样式表将xml文档从一种格式转换为另一种格式。
答案 1 :(得分: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
...