gpt4 book ai didi

c# - 在 C# 中创建自定义跨平台文件格式的序列化方法

转载 作者:行者123 更新时间:2023-11-30 22:12:43 25 4
gpt4 key购买 nike

我正在编写一个 .NET 4.0 应用程序,我想为其创建自定义文件格式以进行序列化:

  • 一个数据表(可以很大)
  • 自定义类(包含字符串和数字属性、枚举和类列表)
  • 图片

我想让这种文件格式在未来不断发展(通过添加属性、图像等)。我还需要这种文件格式在其他平台上可读,例如 Android 和 iOS,以防我将来创建移动应用程序。

我见过几个类似的问题,大多数解决方案都建议使用 Protocol Buffers、JSON、XML 或像 SQLite 这样的轻量级 SQL RDBMS。

我在这些问题中不常看到的是许可证和压缩的主题。由于我会将我的应用程序作为商业产品分发,因此我想使用允许包含在商业产品中的 .NET 库。由于文件格式将包含一个可能很大的数据表,因此我需要一种具有良好压缩率的方法。

你能帮我找到满足我需求的最佳解决方案吗?

提前致谢

最佳答案

就个人而言,我建议避免考虑“表”的序列化。想想同类类型实体列表之类的东西。您以后总是可以向这些实体添加成员(大多数序列化程序都可以)。就最小的开销和开放许可而言,我谦虚地认为 protobuf-net 将是一个合理的选择——它是谷歌“ Protocol Buffer ”规范的实现,旨在提高在线效率和版本容错性(尤其是在添加成员时).剩下的就是压缩;现在:由于有线格式已经非常简洁(它是一种密集的二进制格式,仅使用数字作为字段标识符 - 而不是名称),它实际上并不包含任何“压缩”;但是,如果您的数据以文本(长描述等)为主,那么是的:它仍然可以削减一些字节 - 但您可以通过将序列化和压缩视为分开来做到这一点 - 而且只是通过类似 GZipStream 的方式运行它。由于 .NET 中的 Stream 可以充当装饰器,这通常是微不足道的,即

using(var target = GetTheUndrelyingStream())
using(var zip = new GZipStream(target))
{
Serializer.Serialize(zip, obj);
}

关于c# - 在 C# 中创建自定义跨平台文件格式的序列化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com