DataContractSerializer无法读取空命名空间xmlns =“”的数据类型

时间:2015-11-06 14:11:31

标签: xml wcf soap xml-namespaces datacontractserializer

美好的一天! 我的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任何帮助, 最好的祝福, 亚历山大

1 个答案:

答案 0 :(得分:1)

在我的对象上,每个DataContract的命名空间与我的XML中的xmlns命名空间匹配。

我想如果你添加:Namespace="http://schemas.xmlsoap.org/soap/envelope/" 对你的DataContracts,它应该工作。