2013-10-24 8 views
2

我正在寫一個.NET 4.0應用,我想創建一個自定義的文件格式進行序列化:序列化方法C#創建一個自定義的跨平臺文件格式

  • 數據表(那可大)類
  • 自定義類(包含字符串和數值屬性,枚舉和列表)
  • 圖片

我想使這種文件格式在未來不斷變化的(通過增加屬性,ima ges等)。我還需要這種文件格式,以便在其他平臺上可讀,例如Android和iOS,以防將來創建移動應用程序。

我見過幾個類似的問題,大多數解決方案都建議使用Protocol Buffers,JSON,XML或像SQLite這樣的輕量級SQL RDBMS。

我在這些問題中沒有經常看到的是許可證和壓縮的主題。 由於我將作爲商業產品發佈我的應用程序,因此我想使用允許包含在商業產品中的.NET庫。 而且由於文件格式將包含一個可能很大的數據表,所以我需要一個壓縮率很好的方法。

你能幫我找到最適合我需求的解決方案嗎?

在此先感謝

回答

1

JulienVan,

當查看軟件許可證在商業上採用了我公司傾向於支持MIT和BSD。這些許可證允許商業使用和分發,沒有太多限制。

有許多導遊牌,這裏是一個我認爲是體面: http://www.smashingmagazine.com/2011/06/14/understanding-copyright-and-licenses/

一般地講,JSON序列化你的消息比XML更高效。出於商業目的,我使用牛頓圖書館有三個原因。它速度很快,擁有MIT許可證,可以通過NuGet獲得。

看看這裏: http://json.codeplex.com

我希望幫助。

+0

嗨,感謝您提供關於許可證的信息。因此,當您使用MIT許可證下的組件時,基本上只需在軟件文檔中添加完整的版權聲明?我會記住你的建議,更好地使用JSON over XML。如何使用Json.NET庫序列化System.Data.DataTable對象,以便能夠使用另一個平臺上的另一種語言輕鬆地反序列化它? – JulienVan

2

就個人而言,我會建議避免考慮「表格」的序列化。不要考慮諸如同類型實體列表之類的東西。您可以隨後將成員添加到這些實體(大多數序列化器都可以)。就最小開銷和開放許可而言,我虛心地提出protobuf-net將是一個合理的選擇 - 它是谷歌的「協議緩衝區」規範的實現,旨在有效地實現線路和版本容忍(特別是在添加成員時)。這留下壓縮;現在:因爲連線格式已經非常簡潔了(這是一種密集的二進制格式,只使用字段標識符的數字 - 不是名稱),它實際上並不包含任何「壓縮」但是,如果您的數據是由文本(長描述等)支配的,那麼是的:它仍然可以削減一些字節 - 但您可以通過將序列化和壓縮視爲單獨的方式來執行此操作, GZipStream。由於.NET中的Stream可以充當裝飾器,所以這通常是微不足道的,即

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

嗨馬克,感謝您的意見。我正在考慮「表格」的序列化,因爲我的應用程序以不同來源以System.Data.DataTable對象的形式打開數據文件,這些對象從不具有相同的列。這就是爲什麼如果一個方法可以自動序列化一個數據表,而不必爲每個數據表編寫類型化實體,它會對我有很大的幫助。我注意到你的處理序列化和壓縮的建議是分開的。也許有壓縮的文件格式包含序列化的數據和可能的附加文件在未來可能會有用。 – JulienVan

相關問題