[英]How to ensure interoperability with DataContractSerializer when talking to non-.NET app?
假设我有一个非.NET应用程序,该应用程序需要通过DataContractSerializer编写要由.NET应用程序反序列化的数据。 规范在哪里描述必要的确切格式?
这样的规范应该描述很多东西,包括:
http://schemas.datacontract.org/2004/07/
开头? preserveObjectReferences==true
)(好吧,我想MSDN说这种情况甚至不能互操作 ) 似乎是一个简单的问题,不是吗? 但是我看不到它在MSDN中直接解决。 (我发现的全部是论坛帖子,其中指出非.NET应用程序需要先向.NET应用程序请求WSDL规范文件。但这似乎是错误的。)
(除了DataContractSerializer,我没有使用WCF的任何东西)
我们使用WSDL在Java和.net应用程序之间通信服务定义,它对我们来说很好用。
您需要注意的一件事是使用哪种数据类型,使用两种系统都可以理解的数据类型,例如:
DataContractSerializer不是WCF的一部分,它是WCF依赖的运行时序列化的一部分。
过去,我曾使用DataContractSerializer对从xml转换生成的XML对象进行反序列化。 这可能与您要执行的操作不符。
为了弄清楚序列化器所需的XML,我发现编写一小段代码将对象序列化为字符串以查看其结构和XML名称空间是一件容易的事。
[TestFixture]
public class TestDataContractSerializerOutput
{
[Test]
public void Should_give_me_some_serialized_xml()
{
Foo foo = new Foo();
foo.Bars.Add(new Bar { Name = "Wibble"});
var dataContractSerializer = new DataContractSerializer(typeof(Foo), new[] { typeof(Bar) } );
using (Stream stream = new MemoryStream())
{
dataContractSerializer.WriteObject(stream, foo);
stream.Position = 0;
using (StreamReader streamReader = new StreamReader(stream))
{
Trace.WriteLine(streamReader.ReadToEnd());
}
}
}
}
[DataContract]
public class Foo
{
public Foo()
{
Bars = new List<IBar>();
}
[DataMember]
public IList<IBar> Bars { get; set; }
}
public interface IBar
{
string Name { get; set; }
}
[DataContract]
public class Bar : IBar
{
public string Name { get; set; }
}
通过此信息,您可以了解如何构造XML,还可以获取xml模式以进行额外的验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.