【问题标题】:'Unable to deserialize XML body with root name 'Envelope' and root namespace 'http://schemas.xmlsoap.org/soap/envelope/' (for operation '')'无法反序列化具有根名称'信封'和根名称空间'http://schemas.xmlsoap.org/soap/envelope/'的XML正文(用于操作'')
【发布时间】:2016-06-19 02:36:12
【问题描述】:

服务器在处理请求时遇到错误。异常消息是“无法使用 DataContractSerializer 反序列化根名称为“信封”和根命名空间“http://schemas.xmlsoap.org/soap/envelope/”的 XML 正文(用于操作“通知”和合同(“IPush”,“http://www.ffffff.org/uuu/2003/05/beta”))。确保将 XML 对应的类型添加到服务的已知类型集合中。有关更多详细信息,请参阅服务器日志。异常堆栈跟踪

<?xml version="1.0" encoding="utf-8" ?>
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
  <ResponseId xmlns="http://www.mhotel.com/"/>
  </soap:Header>
<soap:Body>
  <ns3:NotifRQ Status="yes" Token="ggggg" xmlns:ns2="http://www.yyyyyy.com/"     xmlns:ns3="http://www.ffffff.org/uuu/">
   </ns3:NotifRQ>

   [DataContract(Namespace = "http://www.ffffff.org/uuu/")]
   public class HotelResNotifRQ
   {
    public HotelResNotifRQ()
    {
        NotifRQ = new NotifRQ();
    }
    [DataMember(Name = "NotifRQ")]
    public NotifRQ NotifRQ{ get; set; }
}


  [DataContract(Namespace = "http://www.ffffff.org/uuu/")]
  public class NotifRQ
  {
    [DataMember(Name = "Status")]
    public string Status { get; set; }
    [DataMember(Name = "Token")]
    public string Token { get; set; }

    }

【问题讨论】:

  • 您是否将类型添加到“已知类型”?

标签: c# xml wcf soap


【解决方案1】:

您必须将NotifRQ 类型添加到HotelResNotifRQ 的数据合约的已知类型中。

引用MSDN:

KnownTypeAttribute 类允许您预先指定在反序列化过程中应包括在内的类型以供考虑。

因此考虑执行以下操作:

[DataContract(Namespace = "http://www.ffffff.org/uuu/")]
[KnownType(typeof(NotifRQ))] // add NotifRQ as a known type
public class HotelResNotifRQ
{
    public HotelResNotifRQ()
    {
        NotifRQ = new NotifRQ();
    }

    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多