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

标签 c# java .net serialization

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

编辑:为了更清楚,文件是文本文件..但在 .NET 中序列化的二进制文件。在 linux 端,我需要使用 Perl/Java/Bash 来反序列化和读取这些文件。我有不能触及 .NET 端代码的约束。我所做的任何事情都必须在 linux 端。

谢谢,

最佳答案

如果您有 .NET CLI 实现,则可以在 Linux 上反序列化 .NET 序列化数据,例如 MonoDotGNU .这样您就可以编写一个 C# 包装器来处理反序列化,然后如 Brian 上面所述,如果您想在非 .NET 应用程序中使用数据,则可以使用 XML 重新序列化。

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

BinaryFormatter 和 FileStream 类:

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

要反序列化,请创建 BinaryFormatter 和 FileStream 类的实例,将序列化数据加载到 FileStream 中。然后在 BinaryFormatter 上调用反序列化并转换为必要的数据类型(我在下面将其称为 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 序列化的更多信息,请参阅 this page在 MSDN 上。

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

希望这些信息对您有用!

关于c# - 我们可以在 Linux 机器上读取在 .NET 中序列化的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471586/

相关文章:

c# - 通过 C# 创建 VCS 文件,但 outlook 或 C# 不喜欢我的日期

java - BufferedReader readLine() 和移动文件

java - (8 Queens) 判断一个皇后是否适合二维矩阵

.net - 用于 block 上传的 Azure PutBlockAsync 和 PutBlockListAsync

c# - 我可以在平面层次结构中组织 Git 子模块吗?

c# - 使用 Tamir.SharpSsh 的 SSH/SFTP 连接问题

c# - WPF 保留 Tab 控件状态

c# - 使用 TTS 将 MemoryStream 的音频输出到 Discord Bot

java - 如何使用restcontroller在spring restful webservice中记录传入的json请求?

c# - 如何否定委托(delegate)?