Har*_*non 5 .net c# java serialization
我需要将一些以序列化形式编写的文件作为Windows机器(C#.NET序列化)中的文件传输到linux机器.我怎样才能做到这一点?我需要在linux端使用perl/Java/bash.
编辑:为了更清楚,文件是文本文件..但在.NET中二进制序列化.在linux方面,我需要使用Perl/Java/Bash来反序列化和读取这些文件.我有一个约束,即.NET端代码无法触及..我所做的一切都必须在linux端.
谢谢,
如果您具有.NET CLI实现(例如Mono或DotGNU),则可以在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类似.
我希望这个信息是有用的!
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |