我將分享我們當前項目中使用的XMLManager。這是很容易使用,你只是傳遞要serialze並從對象的類型,就像這樣:
YourObject myObject = new YourObject();
myObject.SomeInfoString = "Hello World";
XMLManager<YourObject>.SerialzeToFile(myObject, pathToSaveTo)
YourObject loadedObject = XMLManager<YourObject>.SerialzeFromFile(pathToYourFile)
這裏的實現(請注意,你可能想要做在catch子句的東西,我已經刪除了我們在那裏做,因爲它是具體到了執行):
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Xml;
using System.Xml.Serialization;
/// <summary>
/// The XMLManager can be used to serialize to and from XML files.
/// </summary>
/// <typeparam name="T">The type to serialize.</typeparam>
public static class XmlManager<T>
{
/// <summary>
/// Static method SerializeFromFile
/// </summary>
/// <param name="path">
/// The path.
/// </param>
/// <returns>
/// returns T
/// </returns>
public static T SerializeFromFile(string path)
{
try
{
using (var xmlStream = new FileStream(path, FileMode.Open))
{
return FromStream(xmlStream);
}
}
catch (Exception ex)
{
return default(T);
}
}
/// <summary>
/// Method FromStream
/// </summary>
/// <param name="xmlStream">
/// The xml stream.
/// </param>
/// <returns>
/// returns T
/// </returns>
public static T FromStream(Stream xmlStream)
{
try
{
var xmlReader = XmlReader.Create(xmlStream);
var serializer = new XmlSerializer(typeof(T));
var value = (T)serializer.Deserialize(xmlReader);
return value;
}
catch (Exception ex)
{
return default(T);
}
}
/// <summary>
/// Method SerializeToFile
/// </summary>
/// <param name="xmlObject">
/// The xml object.
/// </param>
/// <param name="xmlPath">
/// The xml path.
/// </param>
/// <param name="overwriteExisting">
/// The overwrite existing.
/// </param>
public static void SerializeToFile(T xmlObject, string xmlPath, bool overwriteExisting)
{
try
{
var mode = overwriteExisting ? FileMode.Create : FileMode.CreateNew;
using (var xmlStream = new FileStream(xmlPath, mode))
{
ToStream(xmlObject, xmlStream);
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// Method ToStream
/// </summary>
/// <param name="xmlObject">
/// The xml object.
/// </param>
/// <param name="xmlStream">
/// The xml stream.
/// </param>
public static void ToStream(T xmlObject, Stream xmlStream)
{
try
{
var xmlSettings = new XmlWriterSettings { Indent = true, NewLineOnAttributes = false };
var writer = XmlWriter.Create(xmlStream, xmlSettings);
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(writer, xmlObject);
}
catch (Exception ex)
{
}
}
}
將此信息傳遞到一個視圖您在你使用XMLManager反序列化對象的視圖模型的屬性,以及通過XAML綁定它。
public string MyObjectInfoString
{
get
{
return this.myObject.InfoString;
}
set
{
if (this.myObject.InfoString == value)
{
return;
}
this.myObject.InfoString = value;
RaisePropertyChanged("MyObjectInfoString");
}
}
[編輯]還不如顯示XAML以及:
<TextBlock Text="{Binding MyObjectInfoString}" />
非常感謝,Amadeus的。但是我想知道的,不僅僅是一個具體的實現,是什麼方法是最好的,因爲我的XML不是很複雜 – mitomed 2012-04-27 07:53:41