对大类进行分块以进行序列化

问题描述 投票:0回答:1

我遇到一个问题,我有一个大类,在该类中我有 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# serialization
1个回答
0
投票

如果您使用的是 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

© www.soinside.com 2019 - 2024. All rights reserved.