我遇到一个问题,我有一个大类,在该类中我有 4 个包含其他类的属性,并且该类包含各种列表和模型(带有属性的简单类)
类看起来像:
[Serializable]
public class BackupProject
{
public DocumentSet Documents;
public CompareSet MetaData;
public RelationshipSet Relationships;
public Dictionary<string, ItemConfig> DocumentData;
}
要序列化我正在使用:
using (FileStream stream = File.Open(fullPath + "/" + backupFile, FileMode.Create))
{
stream.Position= 0;
var bformatter = new BinaryFormatter();
using (ZipOutputStream zipStream = new ZipOutputStream(stream))
{
zipStream.SetLevel(9);
ZipEntry zipEntry = new ZipEntry("BackupProject") {DateTime = DateTime.Now};
zipStream.PutNextEntry(zipEntry);
bformatter.Serialize(zipStream, documents);
}
}
如您所见,我尝试了数据压缩,但仍然得到:
System.Runtime.Serialization.SerializationException“内部 数组不能扩展到大于 Int32.MaxValue 元素。"
这就是为什么我需要把这门课分成块,但不知道如何做这样不规则的课程内容。
如果您使用的是 C# 9 或更高版本,您可以使用 ChunkyMonkey Code Generator 通过两种方法为
BackupProject
类生成部分类:
IEnumerable<BackupProject> Chunk(int chunkSize) BackupProject
MergeChunks(IEnumerable<BackupProject> chunks)
第一个将你的对象分割成多个块,只要该类已用
[Chunk]
属性修饰即可。每个块在每个列表、数组、字典或集合属性中最多包含 chunkSize 个元素。每个块都会重复其他类型的属性。注意:当前不支持可为 Null 的类型。
第二个将几个块合并回一个对象实例。
https://www.nuget.org/packages/Gord0.ChunkyMonkey.CodeGenerator