在方法中使用方法类型反序列化文本

时间:2019-02-23 15:22:26

标签: c# json.net

我正在尝试为我的统一游戏开发保存槽创建通用的加载/保存类型的库。我不是在每次创建实现,而是在尝试创建一个通用的实现,以至少帮助测试。

我有这种方法:

public List<T> Load<T>()
{
    string rawSaveData = _dataAccessLayer.Load();
    if (!string.IsNullOrWhiteSpace(rawSaveData))
        List<T> loadedData = JsonConvert.DeserializeObject<T>(rawSaveData);
}

由于列表需要强类型,所以我可能正在使用List<T>反序列化。 如何反序列化rawSavaData中包含的数据以键入T

这项工作至关重要,因为在我的项目中使用此方法的原因是:

LevelManager.Load<SaveSlotType>();
LevelManager.Load<DifferentSaveSlot>()

无需担心文件的加载方式,它只是从文本文件加载到字符串中,然后反序列化,但这就是问题所在

1 个答案:

答案 0 :(得分:1)

您选择了正确的路径,但是您的代码中有两个错误:

1。if不能在一行内声明变量(它没有意义,因为在使用它之前它将超出范围),因此请在if之外声明List<T>

2。您的结果属于List<T>类型,而不是T类型,因此反序列化为List<T>

List<T> loadedData;
if (!string.IsNullOrWhiteSpace(rawSaveData))
    loadedData  = JsonConvert.DeserializeObject<List<T>>(rawSaveData);

整个代码如下:

public List<T> Load<T>()
{
    List<T> loadedData; 
    try{
        string rawSaveData = _dataAccessLayer.Load();
        if (!string.IsNullOrWhiteSpace(rawSaveData))
        loadedData = JsonConvert.DeserializeObject<List<T>>(rawSaveData);
       }
   catch{
      loadedData = new List<T>();
       }
   return loadedData;
}