我们可以在linux机器上读取.NET中序列化的对象吗?

Har*_*non 5 .net c# java serialization

我需要将一些以序列化形式编写的文件作为Windows机器(C#.NET序列化)中的文件传输到linux机器.我怎样才能做到这一点?我需要在linux端使用perl/Java/bash.

编辑:为了更清楚,文件是文本文件..但在.NET中二进制序列化.在linux方面,我需要使用Perl/Java/Bash来反序列化和读取这些文件.我有一个约束,即.NET端代码无法触及..我所做的一切都必须在linux端.

谢谢,

BWH*_*zel 6

如果您具有.NET CLI实现(例如MonoDotGNU),则可以在Linux上反序列化.NET序列化数据.通过这种方式,您可以编写一个C#包装器来处理反序列化,然后如上所述,如果要在非.NET应用程序中使用数据,则使用XML进行重新序列化.

对于.NET,必要的命名空间和类是:

BinaryFormatter和FileStream类:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
System.IO.FileStream
Run Code Online (Sandbox Code Playgroud)

要反序列化,请创建BinaryFormatter和FileStream类的实例,将序列化数据加载到FileStream中.然后在BinaryFormatter上调用Deserialize并转换为必要的数据类型(我在下面称它为TheClass):

BinaryFormatter formatter = new BinaryFormatter();
FileStream file = File.OpenRead(@"InsertFileName");
TheClass classInstance = (TheClass)formatter.Deserialize(file);
file.Close();
Run Code Online (Sandbox Code Playgroud)

使用原始XML或SOAP的XML序列化可以与非.NET应用程序更加互操作.使用SoapFormatter类可以使用SOAP序列化:

System.Runtime.Serialization.Formatters.Soap.SoapFormatter
Run Code Online (Sandbox Code Playgroud)

通过创建FileStream和SoapFormatter实例并调用Soapformatter Serialize方法来执行序列化.要序列化上面的classInstance示例:

FileStream file = File.Create(@"InsertFileName");
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(file, classInstance);
file.Close();
Run Code Online (Sandbox Code Playgroud)

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

System.Xml.Serialization.XmlSerializer
Run Code Online (Sandbox Code Playgroud)

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

XmlSerializer serializer = new XmlSerializer(typeof(TheClass));
StreamWriter xmlFile = new StreamWriter(@"InsertFileName");
serializer.Serialize(xmlFile, classInstance);
xmlFile.Close();
Run Code Online (Sandbox Code Playgroud)

一旦使用XML,无论是原始的还是SOAP,其他语言(如Java)都应该很难阅读它们.有关XML序列化的更多信息,请参阅MSDN上的此页面.

为了在Linux上使用.NET,Mono Project创建了一个名为MonoDevelop的IDE,其工作方式与Windows上的Visual Studio类似.

我希望这个信息是有用的!