有很多方法可以在.NET中编写XML。下面是使用XmlWriter
,对于非常简单的内容,例如在这种情况下,工作的方式:
string text1 = /* get value of textbox */;
string text2 = /* get value of textbox */;
string text3 = /* get value of textbox */;
// Set indent=true so resulting file is more 'human-readable'
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true };
// Put writer in using scope; after end of scope, file is automatically saved.
using (XmlWriter writer = XmlTextWriter.Create("file.xml", settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteElementString("text1", text1);
writer.WriteElementString("text2", text2);
writer.WriteElementString("text3", text3);
writer.WriteEndElement();
}
一个注意:你应该避免在UI线程上执行的文件操作,因为这可能会导致阻塞行为(例如磁盘可以是速度慢并导致用户界面在写入文件时冻结,或者它可能正在写入网络位置并在连接时挂起一段时间)。最好放置一个进度对话框并显示一条消息“Please wait while file is saved ...”并在后台执行文件操作;一个简单的方法是发布后台操作的线程池using BeginInvoke
/EndInvoke
。
如果你想使用XmlSerializer来代替,那么你就请按照下列步骤操作:
- 创建
public
类型作为文档的根元素,并与XmlRoot
对它进行标记。
- 添加由原始/内置类型或您自己的
public
自定义类型构成的元素/属性,这些自定义类型也是XML可序列化的,并根据需要用XmlElement
或XmlAttribute
标记它们。
- 要写出数据,请使用
XmlSerializer.Serialize
以及适当的Stream
,StreamWriter
或XmlWriter
以及您的根对象。
- 要重新读取数据,请使用
XmlSerializer.Deseralize
和适当的Stream
,TextReader
或XmlReader
,将返回类型转换回您的根对象。
Full sample。
类型连载:
[XmlRoot("customer")]
public class CustomerData
{
// Must have a parameterless public constructor
public CustomerData()
{
}
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("city")]
public string City { get; set; }
[XmlElement("company")]
public string Company { get; set; }
public override string ToString()
{
return
"Name=[" + this.Name + "] " +
"City=[" + this.City + "] " +
"Company=[" + this.Company + "]";
}
}
代码读/写数据:
// Initialize the serializer to write and read the data
XmlSerializer serializer = new XmlSerializer(typeof(CustomerData));
// Initialize the data to serialize
CustomerData dataToWrite = new CustomerData()
{
Name = "Joel Spolsky",
City = "New York",
Company = "Fog Creek Software"
};
// Write it out
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true };
using (XmlWriter writer = XmlTextWriter.Create("customer.xml", settings))
{
serializer.Serialize(writer, dataToWrite);
}
// Read it back in
CustomerData dataFromFile = null;
using (XmlReader reader = XmlTextReader.Create("customer.xml"))
{
dataFromFile = (CustomerData)serializer.Deserialize(reader);
}
Console.WriteLine(dataFromFile);
什么是AddCustomer?它是一种形式吗?为什么不能创建一个具有四个字符串属性的类,然后对其进行序列化,而不是当前的实现。 – Anuraj 2011-12-26 03:05:04
当方法调用对于对象的当前状态无效时引发的异常。 – 2011-12-26 03:16:45
是的,它是一个包含4个文本框的表单,我需要将用户放入其中的值序列化为一个xml文件。 – Michael 2011-12-26 06:39:53