簡體   English   中英

我們可以在linux機器上讀取.NET中序列化的對象嗎?

[英]Can we read an object serialized in .NET in a linux machine?

我需要將一些以序列化形式編寫的文件作為Windows機器(C#.NET序列化)中的文件傳輸到linux機器。 我怎樣才能做到這一點? 我需要在linux端使用perl / Java / bash。

編輯:為了更清楚,文件是文本文件..但在.NET中二進制序列化。 在linux方面,我需要使用Perl / Java / Bash來反序列化和讀取這些文件。 我有一個約束,即.NET端代碼無法觸及..我所做的一切都必須在linux端。

謝謝,

如果您具有.NET CLI實現(例如MonoDotGNU) ,則可以在Linux上反序列化.NET序列化數據。 通過這種方式,您可以編寫一個C#包裝器來處理反序列化,然后如上所述,如果要在非.NET應用程序中使用數據,則使用XML進行重新序列化。

對於.NET,必要的命名空間和類是:

BinaryFormatter和FileStream類:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
System.IO.FileStream

要反序列化,請創建BinaryFormatter和FileStream類的實例,將序列化數據加載到FileStream中。 然后在BinaryFormatter上調用Deserialize並轉換為必要的數據類型(我在下面稱它為TheClass):

BinaryFormatter formatter = new BinaryFormatter();
FileStream file = File.OpenRead(@"InsertFileName");
TheClass classInstance = (TheClass)formatter.Deserialize(file);
file.Close();

使用原始XML或SOAP的XML序列化可以與非.NET應用程序更加互操作。 使用SoapFormatter類可以使用SOAP序列化:

System.Runtime.Serialization.Formatters.Soap.SoapFormatter

通過創建FileStream和SoapFormatter實例並調用Soapformatter Serialize方法來執行序列化。 要序列化上面的classInstance示例:

FileStream file = File.Create(@"InsertFileName");
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(file, classInstance);
file.Close();

原始XML序列化是高度可定制的,但工作方式略有不同。 XMLSerializer類用於此目的:

System.Xml.Serialization.XmlSerializer

要使用XML序列化序列化TheClass,您將需要XmlSerializer和StreamWriter的實例(在System.IO中):

XmlSerializer serializer = new XmlSerializer(typeof(TheClass));
StreamWriter xmlFile = new StreamWriter(@"InsertFileName");
serializer.Serialize(xmlFile, classInstance);
xmlFile.Close();

一旦使用XML,無論是原始的還是SOAP,其他語言(如Java)都應該很難閱讀它們。 有關XML序列化的更多信息,請參閱MSDN上的此頁面

為了在Linux上使用.NET,Mono Project創建了一個名為MonoDevelop的IDE,其工作方式與Windows上的Visual Studio類似。

我希望這個信息是有用的!

即使您無法觸摸.Net代碼,您仍然可以通過編寫一個簡單的.Net程序來解決這個問題。該程序將序列化對象作為輸入,並將一個重新序列化的對象作為輸出(使用更易於閱讀的序列化,比如XML)。 如果這不切實際,你將會感受到痛苦。 我不知道可以讀取Windows .Net二進制序列化文件的Linux包裝器,盡管Mono可能知道如何操作它。

如果你想自己做,你可能會發現Lluis Sanchez Gual的頁面是一個有用的開始,記錄它是如何工作的,盡管它是一個舊頁面。

序列化包含足夠的信息來提取相應的對象並用日期填充它們。

對於簡單對象,您可以模擬反序列化過程,但沒有任何東西可以幫助您這樣做。 你需要自己實現一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM