1.将XML数据写入文件
/// <summary>
/// 写入xml
/// </summary>
/// <typeparam name="T">传入obj得类型</typeparam>
/// <param name="fileName">保存得文件路径</param>
/// <param name="obj">要保存得数据</param>
public void WriteObjectToFile<T>(string fileName, T obj)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
using (XmlWriter writer = new XmlTextWriter(fileName, Encoding.UTF8))
{
serializer.WriteObject(writer, obj);
}
}
2.从文件中读取XML数据,并序列化为对象
/// <summary>
/// 从文件中读取数据到xml文件
/// </summary>
/// <typeparam name="T">返回类型</typeparam>
/// <param name="fileName">读取的文件路径</param>
public T ReadObjectFromFile<T>(string fileName)
{
//会有多线程访问,文件被占用问题
FileStream fs = new FileStream(fileName, FileMode.Open);
/*FileAccess.Read读取和写入到文件的访问
*ReadWrite 允许随后打开文件读取或写入。
* 如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。
*FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
*/
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
DataContractSerializer ser = new DataContractSerializer(typeof(T));
T obj = (T)ser.ReadObject(reader, true);
reader.Close();
fs.Close();
return obj;
}
3.将模型数据序列化为XML格式,并返回字符串
/// <summary>
///
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="obj">模型数据</param>
/// <returns>返回xml字符串</returns>
public string Serialize<T>(T obj)
{
DataContractSerializer ser = new DataContractSerializer(typeof(T));
string xmlStr = String.Empty;
using (MemoryStream stream = new MemoryStream())
{
try
{
ser.WriteObject(stream, obj);
xmlStr = Encoding.Unicode.GetString(stream.ToArray());
}
catch
{
throw;
}
}
return xmlStr;
}
4.将XML字符串转换成模型
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xmlStr">xml字符串</param>
/// <returns>返回模型</returns>
public T Deserialize<T>(string xmlStr)
{
T obj;
try
{
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
using (TextReader reader = new StringReader(xmlStr))
{
using (XmlReader xReader = XmlReader.Create(reader))
{
obj = (T)dcs.ReadObject(xReader);
}
}
}
catch
{
throw;
}
return obj;
}
后两个方法依赖的程序集
using System.Runtime.Serialization;
Model模型要加特性,这样才能序列化成功
[Serializable, DataContract]
public class NFSInfo
{
[DataMember]
public string Name{ get; set; }
[DataMember]
public string Age { get; set; }
}