如果您有 .NET CLI 实现,例如 Mono 或 DotGNU,您可以在 Linux 上反序列化 .NET 序列化数据。这样,您就可以编写一个 C# 包装器来处理反序列化,然后,正如 Brian 上面所说,如果您想在非 .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 上的this page。
为了在 Linux 上使用 .NET,Mono 项目创建了一个名为 MonoDevelop 的 IDE,它的工作方式类似于 Windows 上的 Visual Studio。
希望这些信息有用!