我正在处理一个旧项目并进行细微更改。在某些地方,代码使用 SoapFormatter 类来序列化和反序列化 SOAP 格式的数据。代码运行良好,没有任何问题。
MSDN 帮助说明了有关 SoapFormatter 类的以下内容:
“从 .NET Framework 2.0 开始,此类已过时。请改用 BinaryFormatter。”
在 .NET 4.5 上编译项目时,我没有收到任何错误或警告。现在我的困惑是——
SoapFormatter 真的过时了吗(对于 .NET 4.5 应用程序)?
如何使用 BinaryFormatter 而不是 SoapFormatter 以 SOAP 格式序列化/反序列化?
除非绝对需要,否则我不想更改代码。
先感谢您!
您建议使用哪种Java SOAP XML对象序列化库来与其他平台/语言(.NET,Delphi)进行Java对象交换?
通信场景可能如下所示:
我知道有XStream XML序列化库和JSON作为替代解决方案,但是由于Delphi和.Net内置了对SOAP XML序列化对象的支持,这将提供一种"标准化"方式,支持嵌套对象,数组等高级功能等等.
编辑: 同时,我发现JAXB - (https://jaxb.dev.java.net/),JAXMe和JiBX的 - XML绑定到Java代码(http://jibx.sourceforge.net/).但它们默认不生成SOAP序列化XML.
一种可能的解决方案是一个Web服务库,它能够在没有HTTP服务器的情况下运行,并为SOAP XML内容提供简单的文件接口(不是完整的请求,只是一个序列化的对象).Axis 2和CXF看起来非常有趣.
我正在阅读序列化,到目前为止一直在搞乱BinaryFormatter和SoapFormatter.到目前为止,非常好 - 而且所有内容都完美地序列化和反序列化.
但是,当我尝试下面的代码时,我希望我的数据文件不包含Name的信息 - 它确实如此.当我在字段上指定SoapIgnore时,为什么会包含它?
我也试过SoapAttribute("SomeAttribute")
Age-field,这也没有任何区别.框架版本设置为2.0,但在3.5和4.0中也是如此.
using System;
using System.Runtime.Serialization.Formatters.Soap;
using System.IO;
using System.Xml.Serialization;
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Age = 42;
p.Name = "Mr Smith";
SoapFormatter formatter = new SoapFormatter();
FileStream fs = new FileStream(@"c:\test\data.txt", FileMode.Create);
formatter.Serialize(fs, p);
}
}
[Serializable]
class Person
{
public int Age;
[SoapIgnore]
public string Name;
}
Run Code Online (Sandbox Code Playgroud)