我正在尝试使用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?也许是按属性写的?
答案 0 :(得分:1)
对不起,我想尝试做最小的示例时弄清楚了。
一个正式的私有变量中有一个吸气剂,其形式为
public Dictionary<int, obj> GetDict => _dict
,我认为存在无法正常使用的演员表。 在Json中,可以从写为GetDict而不是_dict的属性中看到它。由于这样的事实,转换器最初找不到纯净的吸气剂,因此无法使用。