【问题标题】:Looking for advice on handling generic SOAP responses寻找有关处理通用 SOAP 响应的建议
【发布时间】:2011-05-11 22:11:07
【问题描述】:

我正在开发一个新应用程序的 GUI (WPF),该应用程序将发送各种 SOAP 请求并获取将使用通用格式形成的 SOAP 响应。这是一个示例响应:

  <SOAP-ENV:Body>
    <TheResponse>
        <MetaData>
          <DataSchema>
            <ColumnSchema type="decimal" ref="c0" name="min" />
            <ColumnSchema type="decimal" ref="c1" name="max" />
          </DataSchema>
        </MetaData>
        <Data>
          <Item>
            <c0>0</c0>
            <c1>1</c1>
          </Item>
        </Data>
    </TheResponse>
  </SOAP-ENV:Body>

如您所见,SOAP 响应将定义元数据,然后定义实际数据。我需要根据请求/响应创建不同的对象。在此示例中,对象将具有两个属性 Min 和 Max,其值分别为 0 和 1。

如果我为我知道我需要的对象定义了类,例如:

class MyClass
{
   public decimal Min {get; set;}
   public decimal Max {get; set;}
}

我将如何反序列化 SOAP 响应以创建适当的对象?

感谢您的帮助。

【问题讨论】:

    标签: wpf xml serialization soap deserialization


    【解决方案1】:

    我建议从使用XSD 为您的Soap 消息定义XML 模式开始。

    一旦你有了一个模式,你就可以使用以下方法生成一个类:

    从 Visual Studio 2010 命令提示符运行
    Xsd.exe schema.xsd /classes /language:[CS | VB]。

    现在您有了一个类,您可以使用XML Serialization 将对象转换为 XML,并使用通过 XSD 生成的类将 XML 转换为对象。

    这些步骤无需手动编写代码来检查/解析 XML。

    【讨论】:

    • 感谢您的提示。使用您概述的方法,我的示例中 的值是否会正确填充 Min/Max 属性?是否知道将 部分中的值链接到 部分中的属性名称?
    • 基于您的示例,我看到您的元数据 (DataSchema) 被定义为 XSD 模式,您可以使用该模式生成一个类,该类用于通过 Soap 消息中的序列化传输数据。这允许将 c0 和 c1 的值加载到对象中。我回答的目的是尝试并指导您避免编写解析 XML 并将 XML 转换为对象的代码。
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多