美好的一天! 我的wcf soap服务应该接受给定的xml消息,这些消息来自第三方服务并且我无法更改(在生产中)。 我正在使用DataContractSerializer并且在反序列化消息时遇到一些问题。
邮件的格式为:
<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<newClaim xmlns="urn:CoeoService">
<auth xmlns="">
<partnerId >49</partnerId>
<sandbox>false</sandbox>
</auth>
<person xmlns="">
<id>123123</id>
<dateOfBirth>2015-09-15</dateOfBirth>
</person>
</newClaim>
</Body>
</Envelope>
但是,如果我更改消息(thnx SOAPUI)并从auth和person类型中删除空名称空间 xmlns =“”,它就像魅力一样。
所以我在代码中写的命名空间似乎有些不匹配。 但如果我理解正确,
[DataContract(Namespace ="")]
属性只是完全删除命名空间标记,因此我无法强制DataContractSerializer接受此标记。
是否有其他方法可以实现此目的,而不是手动解析xml请求?
我的datacontract类如下所示
[assembly: ContractNamespace("",
ClrNamespace = "CoeoService")]
namespace CoeoService
{
[DataContract]
public class Auth
{
[DataMember]
public string partnerId;
[DataMember]
public bool sandbox;
}
[DataContract]
public class Person
{
[DataMember]
public string id;
[DataMember]
public DateTime dateOfBirth;
}
}
Thnx任何帮助, 最好的祝福, 亚历山大
答案 0 :(得分:1)
在我的对象上,每个DataContract的命名空间与我的XML中的xmlns命名空间匹配。
我想如果你添加:Namespace="http://schemas.xmlsoap.org/soap/envelope/"
对你的DataContracts,它应该工作。