序列化后的反序列化不适用于C#

时间:2019-05-17 07:36:41

标签: c# json.net

我正在尝试使用C#保存和加载一些非常大的对象。对象(所有相同类型)包含一些列表,一些字典和本机数据类型的矩阵。当然,在文件系统上序列化大约160Mb时,它会填充一些值。序列化似乎可行,但是反序列化存在问题。而且我不会将它们一起加载,只是每个文件一个对象,每次仅一个对象。

我尝试使用

 string json = JsonConvert.SerializeObject(Matrix, Formatting.Intended);
 File.WriteAllText(FilePath, json);

我尝试加载

StreamReader streamReader = new StreamReader(FilePath);
JsonSerializer serializer = new JsonSerializer();
matrix = (MatrixStructure) serializer.Deserialize(streamReader, typeof(MatrixStructure));

以及

string json = File.ReadAllText(FilePath);
MatrixStructure matrix = JsonConvert.DeserializeObject<MatrixStructure>(json);

这两种情况都不适合我。在这两种情况下,我都会得到相同的异常:

  
    

Newtonsoft.Json.JsonSerializationException:无法将当前JSON对象(例如{“ name”:“ value”})反序列化为类型'System.Collections.Generic.List`1 [MyObject1]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。

  

我认为反序列化应该起作用,因为它与我序列化的类相同。但是内部列表似乎有问题

是否可以加载json文件的大小受到限制(我正在尝试加载160Mb,可能以后我会获得更大的文件),因此缺少某些内容?

还是我必须使用其他函数来序列化和反序列化json?也许是按属性写的?

1 个答案:

答案 0 :(得分:1)

对不起,我想尝试做最小的示例时弄清楚了。

一个正式的私有变量中有一个吸气剂,其形式为

public Dictionary<int, obj> GetDict => _dict  

,我认为存在无法正常使用的演员表。 在Json中,可以从写为GetDict而不是_dict的属性中看到它。由于这样的事实,转换器最初找不到纯净的吸气剂,因此无法使用。