我正在编写一个.NET 4.0应用程序,我想创建一个自定义文件格式来序列化:
我想让这种文件格式在未来发展(通过添加属性,图像等)。我还需要这种文件格式在Android和iOS等其他平台上可读,以防我将来创建移动应用程序。
我见过几个类似的问题,大多数解决方案建议使用Protocol Buffers,JSON,XML或像SQLite这样的轻量级SQL RDBMS。
我在这些问题中经常看不到的是许可和压缩的主题。 由于我将我的应用程序作为商业产品分发,我想使用允许包含在商业产品中的.NET库。 由于文件格式将包含一个可能很大的数据表,我需要一个具有良好压缩率的方法。
您能帮我找到满足我需求的最佳解决方案吗?
提前致谢
答案 0 :(得分:2)
就个人而言,我建议不要考虑“表格”的序列化。而不是像同类型实体列表那样的事情。您以后可以随时向这些实体添加成员(大多数序列化程序都可以正常使用)。在最小开销和开放许可方面,我谦卑地认为protobuf-net是一个合理的选择 - 它是google的“协议缓冲区”规范的一种实现,旨在提高线路效率和版本容忍度(特别是在添加成员时) )。这会留下压力;现在:因为有线格式已经非常简洁(它是一种密集的二进制格式,只使用字段标识符的数字而不是名称),它实际上并不包含任何“压缩”;然而,如果你的数据由文本(长描述等)控制,那么是:它仍然可以削减一些字节 - 但你可以通过将序列化和压缩视为单独来实现这一点 - 而且只是通过像GZipStream
之类的东西来运行它。由于.NET中的Stream
可以充当装饰器,因此通常是微不足道的,即
using(var target = GetTheUndrelyingStream())
using(var zip = new GZipStream(target))
{
Serializer.Serialize(zip, obj);
}
答案 1 :(得分:1)
JulienVan,
在查看商业用途的软件许可证时,我的公司倾向于支持麻省理工学院和BSD。这些许可证允许商业使用和分发,没有太多限制。
有许多许可指南,这里有一个我认为合适的: http://www.smashingmagazine.com/2011/06/14/understanding-copyright-and-licenses/
一般来说,使用JSON序列化消息比XML更有效。出于三个原因,我将Newton库用于商业用途。它很快,拥有MIT许可证,可从via NuGet获得。
在这里查看: http://json.codeplex.com
我希望有所帮助。