.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スレッド上でファイル操作を行うことを避ける必要があります(例えば、ディスクをすることができ遅くなり、ファイルを書き込んでいる間にUIがフリーズしたり、ネットワークの場所に書き込んでいて、接続している間にUIがハングする可能性があります)。進行状況ダイアログを表示し、「ファイルが保存されている間お待ちください...」というメッセージを表示し、ファイル操作をバックグラウンドで実行することが最善です。簡単な方法は、スレッドプールusing BeginInvoke
/EndInvoke
のバックグラウンド操作をポストすることです。
あなたの代わりにXmlSerializerを使用したい場合は、以下の手順を実行します:
- ドキュメントのルート要素として機能し、
XmlRoot
でそれをマークするpublic
タイプを作成します。
- プリミティブ/ビルトインタイプまたは独自の
public
カスタムタイプ(XMLシリアライズ可能)の要素/属性を追加し、必要に応じてXmlElement
またはXmlAttribute
とマークします。
- データを書き出すには、適切な
Stream
,StreamWriter
、またはXmlWriter
をルートオブジェクトとともに使用してください。
XmlSerializer.Deseralize
を適切なStream
,TextReader
、またはXmlReader
と組み合わせて使用し、戻り値の型をルートオブジェクトにキャストし直します。
全サンプル。
シリアライズするタイプ:
[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とは何ですか?それはフォームですか?なぜ、現在の実装ではなく、4つの文字列プロパティを持つクラスを作成し、それを直列化できないのですか? – Anuraj
オブジェクトの現在の状態に対してメソッド呼び出しが無効な場合にスローされる例外です。 –
はい、それは4つのテキストボックスを持つフォームなので、ユーザーがXMLファイルに入力する値をシリアル化する必要があります。 – Michael