【问题标题】:Trying to Deserialize a SOAP envelope using DataContractSerializer in C#尝试在 C# 中使用 DataContractSerializer 反序列化 SOAP 信封
【发布时间】:2015-02-28 17:48:28
【问题描述】:

我已经使用 XmlSerializer 完成了这项工作,但想比较使用 DataContractSerializer 的性能。我知道我已经接近了,因为我至少得到了一些对象图,但没有任何数据。我试图反序列化的 XML 示例如下所示:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:Header/>
    <soap-env:Body>
       <n0:OperationalDataProvisioningFetchDataDirectResponse xmlns:n0="http://sap.com/bw" xmlns:prx="proxy">
           <BinaryObject>Binary Data Goes Here</BinaryObject>
           <XMLFormatUsedCode>ABAP_XML</XMLFormatUsedCode>
       </n0:OperationalDataProvisioningFetchDataDirectResponse>
    </soap-env:Body>
</soap-env:Envelope>

我要反序列化的类如下所示:

[DataContract(Name = "Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope
{
    [DataMember(Name = "Header", Order = 0)]
    public object Header;

    [DataMember(Name = "Body", Order = 1)]
    public EnvelopeBody Body;
}

[DataContract(Name = "Body")]
public  class EnvelopeBody
{
    [DataMember(Name = "OperationalDataProvisioningFetchDataDirectResponse", Order = 0)]
    public FetchDataDirectResponse FetchDataDirectResponse;
}

[DataContract(Name = "OperationalDataProvisioningFetchDataDirectResponse", Namespace = "http://sap.com/bw")]
public  class FetchDataDirectResponse
{
    [DataMember(Name = "BinaryObject", Order = 0)]
    public string BinaryObject;

    [DataMember(Name = "XMLFormatUsedCode", Order = 1)]
    public string XMLFormatUsedCode;
}

当我运行它并尝试反序列化这就是我得到的一切:

【问题讨论】:

    标签: c# xml soap deserialization datacontractserializer


    【解决方案1】:

    我想通了。我没有为 Body 的 DataContract 使用正确的命名空间(如果有的话)。这修复了它:

    [DataContract(Name = "Body", Namespace = "http://sap.com/bw")]
    

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2011-09-29
      • 2021-02-13
      • 2013-06-01
      相关资源
      最近更新 更多