我有一个我想要生成xml的产品列表,目前所有产品都保存在List<>中对象....
List<Product> products= DataAccess.GetProducts();
XmlTextWriter writer = new XmlTextWriter(@"C:\ProductsToXml.xml", null);
writer.WriteComment("Nick's Test Products To Xml.");
writer.WriteStartElement("xml");
writer.WriteStartElement("Product");
writer.WriteStartElement("Name");
writer.WriteString("Almonds");
writer.WriteEndElement();
//end for product
writer.WriteEndElement();
//end for xml
writer.WriteEndElement();
writer.Close();
现在我将使用这个骨架并遍历所有产品并添加xml,就像上面的骨架一样。事情是有很多writer.WriteStartElement指令,因为我的产品中有很多数据。我不确定这是否是创建xml文件的最佳方式,或者它是否重要?这种方法对我正在做的事情是否正常?基本上采用一个产品对象,其中包含一堆属性并从中创建xml,这就是代码的所有目的。
你们会这样做吗?
答案 0 :(得分:5)
如何使用XmlSerializer
?
另请参阅:Introducing XML serialization @ MSDN和Changing the XML structure generated by XmlSerializer in C#。
答案 1 :(得分:1)
我认为有两种选择,一种是为XmlSerializer
使用自定义List<Product>
,或者更直接地使用Linq to XML来序列化您的产品:
List<Product> products = new List<Product>();
products.Add(new Product() { Id =1, Name="Foo"});
products.Add(new Product() { Id =2, Name="Bar"});
XElement xDoc = new XElement("Products", products.Select(p => new XElement("Product",
new XAttribute("id", p.Id),
new XAttribute("name", p.Name))));
xDoc.Save(@"testOut.xml");
<强>输出:强>
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product id="1" name="Foo" />
<Product id="2" name="Bar" />
</Products>
修改:
Linq to XML中的组合非常简单 - 所以如果我想要一个“Stuff”的外部节点,我可以只添加该节点(并在末尾添加一个括号):
XElement xDoc = new XElement("Stuff",
new XElement("Products", products.Select(p => new XElement("Product",
new XAttribute("id", p.Id),
new XAttribute("name", p.Name)))));
您可以为“类别”列表复制此方法,只需拥有new XElement("Categories") ...
等等。
答案 2 :(得分:0)
我的代码中有这个:
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<Item>));
TextWriter textWriter = new StreamWriter(@"items.xml");
serializer.Serialize(textWriter, items);
textWriter.Close();
创建一个带有'arrayofitems'根的.xml文件。
答案 3 :(得分:0)
如何使用LINQ来序列化数据?网上有几篇文章。这是一个。 http://kiranpatils.wordpress.com/2008/09/23/generic-list-to-xml-using-linq/