我正在使用以下方法对数据进行序列化/反序列化:
public static T ReadFile<T>(string path, string fileName, SaveFormat saveFormat)
{
fileName = fileName.CaseInsensitiveContains(".") ? fileName : fileName + "." + saveFormat.ToString();
FullFileName = Path.Combine(path, fileName);
if (!File.Exists(FullFileName))
{
Debug.Print(FullFileName + " does not exist...");
return default;
}
switch (saveFormat)
{
case SaveFormat.BIN:
return ReadFromBinaryFile<T>(FullFileName);
case SaveFormat.JSON:
return ReadFromJsonFile<T>(FullFileName);
case SaveFormat.XML:
return ReadFromXmlFile<T>(FullFileName);
default:
return default;
}
}
用法示例:
DataEx1 = FileOps.ReadFile<MyCustomClass>(folderName, fileName, saveFormat);
DataEx2 = FileOps.ReadFile<Float[][]>(folderName, fileName, saveFormat);
它正在工作,但是我更愿意将它用作扩展方法,而不必指定数据类型,因为我一直会在之前声明变量,这有可能吗?
float[][] data;
data.ReadFromFile(folderName, fileName, saveFormat);
我尝试过:
public static T LoadFromFile1<T>(this T data, string path, string fileName, FileOps.SaveFormat saveformat = FileOps.SaveFormat.JSON)
{
return FileOps.ReadFile<T>(path, fileName, saveformat);
}
return FileOps.ReadFile <typeof(data)> (path, fileName, saveformat);
return FileOps.ReadFile <data.GetType()> (path, fileName, saveformat);
但是这些都不起作用,甚至有可能还是我应该停止浪费时间并指定数据类型?
答案 0 :(得分:0)
甚至有可能
排序。这有效:
float[][] data = null;
data = data.ReadFromFile( . . .);
我应该停止浪费时间并指定数据类型吗?
是的。如果您这样指定变量,则只需键入一次类型名称。
var data = FileOps.ReadFromFile<float[][]>(folderName, fileName, saveFormat);