假设我有一个非.NET应用程序需要通过DataContractSerializer编写要由.NET应用程序反序列化的数据。 描述所需格式的规范在哪里?
这样的规范应该描述很多东西,包括:
http://schemas.datacontract.org/2004/07/
?preserveObjectReferences==true
)(好吧,我想MSDN says this case is not even interoperable)(我不使用WCF以外的任何东西,而不是DataContractSerializer)
答案 0 :(得分:0)
我们使用WSDL来协调Java和.net应用程序之间的服务定义,它对我们来说很好。
您需要注意的一件事是您使用的数据类型,使用两个系统都能理解的数据类型,例如:
答案 1 :(得分:0)
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架构以进行额外验证。