.NET的XML序列化的Java模拟是什么?
2008答案 "官方"Java API现在是JAXB - 用于XML绑定的Java API.请参阅Oracle教程.参考实现位于http://jaxb.java.net/
2018年更新 请注意,JDK9中的SE中不推荐使用Java EE和CORBA模块,而是在JDK11中从SE中删除.因此,要使用JAXB,它将需要位于您的例如应用服务器捆绑的现有企业级环境中,或者您需要手动将其引入.
XStream非常擅长将对象序列化为XML而没有太多配置和资金!(它是在BSD许可下).
我们在我们的一个项目中使用它来替换普通的旧java-serialization,它几乎开箱即用.
您可能希望查看Simple XML Serialization项目.这是我在.Net中发现的最接近System.Xml.Serialization的东西.
JAXB是JDK标准版1.6+的一部分.所以它是FREE
没有额外的库来下载和管理.这里有一个简单的例子
XStream好像死了.最新更新是在2008年12月6日.
Simple
看起来像JAXB一样简单和简单,但我找不到任何许可信息来评估它以供企业使用.
值得一提的是,从版本1.4开始,Java就有了java.beans.XMLEncoder和java.beans.XMLDecoder类.这些类执行的XML编码至少与XML序列化非常相似,在某些情况下可能会为您提供帮助.
如果您的类坚持JavaBeans规范的getter和setter,这个方法很容易使用,您不需要架构.有以下警告:
与普通的Java序列化一样
编码和解码在InputStream和OutputStream上运行
该过程使用熟悉的writeObject和readObject方法
与普通的Java序列化相反
编码但也解码导致调用构造函数和初始化程序
编码和解码工作,无论您的类是否实现Serializable
不考虑瞬态修饰符
仅适用于具有公共构造函数的公共类
例如,请采用以下声明:
public class NPair { public NPair() { } int number1 = 0; int number2 = 0; public void setNumber1(int value) { number1 = value;} public int getNumber1() { return number1; } public void setNumber2(int value) { number2 = value; } public int getNumber2() {return number2;} }
执行此代码:
NPair fe = new NPair(); fe.setNumber1(12); fe.setNumber2(13); FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml"); java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1); xe1.writeObject(fe); xe1.close();
会导致以下文件: