寫了一個很丑陋的函式
public void GetDataFromFile<T>(int Type, out List<T> List, out T Object)
{
switch (Type)
{
case 1:
Object = (T)FormatterInformation.Deserialize(FS);
List = null;
break;
case 2:
List = FormatterInformation.Deserialize(FS) as List<T>;
Object = default;
break;
default:
List = null;
Object = default;
break;
}
就是反序列化一個物件或者一組list物件。
怎么用一個泛型函式搞出來呢?
序列化的倒會了。可以多載的。
public void SaveDataToFile <T>(List<T> ListInput)
{
FormatterInformation.Serialize(FS, ListInput);
}
public void SaveDataToFile<T>(T Object)
{
FormatterInformation.Serialize(FS, Object);
}
uj5u.com熱心網友回復:
不清楚你的具體方法,看你發的代碼改成下面的應該就可以了,T是可以是List<>集合或者物件的不用專門定義List<T>public void GetDataFromFile<T>(out T Object)
{
Object= (T)FormatterInformation.Deserialize(FS);
}
呼叫
集合
GetDataFromFile(out List<xxx> obj)
物件
GetDataFromFile(out xxx obj)
uj5u.com熱心網友回復:
同樣序列化也只需要一個方法,不需要多載public void SaveDataToFile(object Object)
{
FormatterInformation.Serialize(FS, Object);
}
或者
public void SaveDataToFile<T>(T Object)
{
FormatterInformation.Serialize(FS, Object);
}
就可以滿足要求,不需要SaveDataToFile <T>(List<T> ListInput)
uj5u.com熱心網友回復:
直接繼承LocalizedTypeGetter
public class LocalizedTypeGetterEx : LocalizedTypeGetter
{
public override Type BindToType(string assemblyName, string typeName)
{
if (typeName.Contains("List") == true && typeName.Contains(typeof(Student).Name) == true) // 如果是泛型集合
{
return typeof(List<Student>); // 直接回傳反序列化的型別
}
return base.BindToType(assemblyName, typeName);
}
}
//或者使用 XmlSerializer ,將要拷貝的物件序列化到流中,然后通過反序列化得到新的物件。
/// <summary>
/// 序列化類
/// </summary>
public class SerializLog
{
//1.使用序列化的方式完成 參考物件的 深復制 是最好的方式
//2.下面的 Clone方法,我需要使用 泛型物件 做為引數,則在 Clone后面需要帶上<T>的宣告,否則編譯出錯
public static T Clone<T>(T realObject) // T 要序列化的物件
{
using (Stream stream = new MemoryStream()) // 初始化一個 流物件
{
XmlSerializer serializer = new XmlSerializer(typeof(T)); //將要序列化的物件序列化到xml檔案(Formatter)
serializer.Serialize(stream, realObject); //將序列后的物件寫入到流中
stream.Seek(0, SeekOrigin.Begin);
return (T)serializer.Deserialize(stream);// 反序列化得到新的物件
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/269961.html
標籤:C#
上一篇:使用的EntityFramework,請問如何直接編輯DataGridView(Winform)然后保存到資料庫中
