Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在方法中使用方法类型反序列化文本_C#_Json.net - Fatal编程技术网

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

C# 在方法中使用方法类型反序列化文本,c#,json.net,C#,Json.net,我正在尝试为我的unity游戏开发保存槽创建一个通用加载/保存类型的库。我不是每次都创建实现,而是尝试创建一个通用的实现来帮助测试 我有这个方法: public List<T> Load<T>() { string rawSaveData = _dataAccessLayer.Load(); if (!string.IsNullOrWhiteSpace(rawSaveData)) List<T> loadedData = Jso

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

我有这个方法:

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

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

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

1.如果不能在一行内声明变量(这没有意义,因为在您可以使用它之前它将超出范围),那么请在if之外声明
列表

2.您的结果类型为
List
而不是
T
,因此反序列化为
List

列表加载数据;
如果(!string.IsNullOrWhiteSpace(rawSaveData))
loadedData=JsonConvert.DeserializeObject(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;
}
公共列表加载()
{
列出加载的数据;
试一试{
字符串rawSaveData=_dataAccessLayer.Load();
如果(!string.IsNullOrWhiteSpace(rawSaveData))
loadedData=JsonConvert.DeserializeObject(rawSaveData);
}
抓住{
loadedData=新列表();
}
返回加载的数据;
}

您的问题是什么?如何反序列化rawSavaData中包含的数据以键入@AshkanMobayenKhiabani@JohneyBronswicAppleton,您将数据反序列化为键入
T
(假设rawSaveData中的数据是
T
对象的数据):
JsonConvert.DeserializeObject
。那么,代码行将产生一个编译器错误。读一下。然后查看要为其分配反序列化结果的
loadedData
变量的类型。然后再次从编译器读取错误消息。试着去理解它。。。
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;
}