前面學了方法,把獲得的類實體系列化到檔案,反序列化繼續用。
但是看到序列化的時候,會一同保存命名空間,換了其他form就打不開這個檔案了。
有沒有什么辦法,直接把命名空間名改了,或者其他方式?
說把原來的form生產dll,然后參考到新form
有沒有只針對這幾個類的啊。
uj5u.com熱心網友回復:
using System.IO;
using System.Xml.Serialization;
public static class XmlTools
{
/// <summary>
/// 將目標序列化為XML格式的檔案,請確保要創建的檔案不存在!
/// </summary>
/// <typeparam name="T">需要序列號的目標型別</typeparam>
/// <param name="filePath">保存的檔案路徑</param>
/// <param name="target">序列號的目標</param>
/// <param name="fileMode">檔案操作模式</param>
public static void Serializer<T>(string filePath, T target, FileMode fileMode)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); //初始化工具
FileStream fileStream = new FileStream(filePath, fileMode); //使用檔案流創建檔案
xmlSerializer.Serialize(fileStream, target); //序列化并保存
fileStream.Close(); //關閉檔案流
fileStream.Dispose(); //銷毀檔案流
}
/// <summary>
/// 將XML格式的檔案反序列化為目標型別的資料
/// </summary>
/// <typeparam name="T">目標型別</typeparam>
/// <param name="filePath">檔案路徑</param>
/// <returns>回傳目標型別的資料</returns>
public static T Deserializer<T>(string filePath)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); //初始化工具
FileStream fileStream = new FileStream(filePath, FileMode.Open); //使用檔案流打開檔案
T result = (T)xmlSerializer.Deserialize(fileStream); //反序列化并保存
fileStream.Close(); //關閉檔案流
fileStream.Dispose(); //銷毀檔案流
return result; //回傳目標
}
}
用這個序列化,似乎和命名空間無關哦
呼叫如下
public class TestData
{
public int age { get; set; }
public string name { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
List<TestData> datas = new List<TestData>();
datas.Add(new TestData() { age = 10, name = "N1" });
datas.Add(new TestData() { age = 12, name = "N2" });
XmlTools.Serializer<List<TestData>>("data.txt", datas, System.IO.FileMode.OpenOrCreate);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/269618.html
標籤:C#
上一篇:linq Union合并多個表,表的結構不同,預設列該怎么處理
下一篇:請問用同一IDE開發的兩套程式,安裝在同一客戶的同一電腦上,為什么一套運行正常,另一套一運行就提示缺MSDATLST.OCX
