2

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

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

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

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

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

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

提前致谢

4

2 回答 2

2

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

using(var target = GetTheUndrelyingStream())
using(var zip = new GZipStream(target))
{
    Serializer.Serialize(zip, obj);
}
于 2013-10-25T07:22:55.083 回答
1

朱利安范,

在考虑商业使用的软件许可证时,我的公司倾向于支持 MIT 和 BSD。这些许可证允许在没有太多限制的情况下进行商业使用和分发。

许可指南有很多,我认为这是一个不错的指南: http ://www.smashingmagazine.com/2011/06/14/understanding-copyright-and-licenses/

一般来说,用 JSON 序列化消息比 XML 更有效。我出于三个原因将 Newton 库用于商业目的。它速度快,拥有 MIT 许可证,可通过 NuGet 获得。

在这里查看:http: //json.codeplex.com

我希望这会有所帮助。

于 2013-10-25T07:05:34.507 回答