我想将从数据库中获取的记录保存在XML文件中,
将XML文件中的x个记录从一个自定义集合中List<T>
处理,然后将更新的项目保存回XML文件.
'T'是一个具有值类型属性的简单对象,类似于 -
public class T
{
public int Id {get; set;}
public string property1 {get; set;}
public string property2 {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
请指导我如何将自定义集合保存List<T>到XML文件,反之亦然?
另外,因为我没有发送这个XML文件,所以在某些回复中建议使用XmlSerializer是否有意义?
小智 16
以下是我们使用XMLSerializer实现此目的的两种方法:
public static T FromXML<T>(string xml)
{
using (StringReader stringReader = new StringReader(xml))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(stringReader);
}
}
public string ToXML<T>(T obj)
{
using (StringWriter stringWriter = new StringWriter(new StringBuilder()))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(stringWriter, obj);
return stringWriter.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
Bro*_*ass 14
虽然您可以使用序列化程序 - 很多时候这是正确的答案 - 我个人会使用Linq to XML,这将使您能够更灵活地了解XML的外观,即从foos基于以下内容的集合创建以下XML:你的班:
<Foos>
<foo Id="1" property1="someprop1" property2="someprop2" />
<foo Id="1" property1="another" property2="third" />
</Foos>
Run Code Online (Sandbox Code Playgroud)
你可以使用:
var xml = new XElement("Foos", foos.Select( x=> new XElement("foo",
new XAttribute("Id", x.Id),
new XAttribute("property1", x.property1),
new XAttribute("property2", x.property2))));
Run Code Online (Sandbox Code Playgroud)
小智 10
使用下面的代码(从您的代码片段中获取的T类),您将能够轻松地序列化到xml文件中,并且没有麻烦的ISerializable麻烦
[Serializable()]
public class T
{
public int Id {get; set;}
public string property1 {get; set;}
public string property2 {get; set;}
}
...
List<T> data = new List<T>()
... // populate the list
//create the serialiser to create the xml
XmlSerializer serialiser = new XmlSerializer(typeof(List<T>));
// Create the TextWriter for the serialiser to use
TextWriter filestream = new StreamWriter(@"C:\output.xml");
//write to the file
serialiser.Serialize(filestream , data);
// Close the file
filestream.Close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59782 次 |
| 最近记录: |