到/从文件的数据序列化/反序列化

时间:2019-12-06 20:34:43

标签: c# file serialization deserialization

我正在使用以下方法对数据进行序列化/反序列化:

        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);

但是这些都不起作用,甚至有可能还是我应该停止浪费时间并指定数据类型?

1 个答案:

答案 0 :(得分:0)

  

甚至有可能

排序。这有效:

float[][] data = null;
data = data.ReadFromFile( . . .);
  

我应该停止浪费时间并指定数据类型吗?

是的。如果您这样指定变量,则只需键入一次类型名称。

var data = FileOps.ReadFromFile<float[][]>(folderName, fileName, saveFormat);
相关问题