【问题标题】:Getting Additional Data from SOAP response从 SOAP 响应中获取附加数据
【发布时间】:2014-04-12 02:05:16
【问题描述】:

我正在从 Web 服务接收以下 SOAP 响应。

<soap:Body>
<SubscriptionQueryResponse>
    <Subscriptions>
        <Subscription></Subscription>
        <Subscription></Subscription>
    </Subscriptions>
    <TotalCount>2</TotalCount>
    <ResultCount>2</ResultCount>
    <StartingSequence>0</StartingSequence>
</SubscriptionQueryResponse>
</soap:Body>

我需要获取总数。

下面是我的代码:

[SoapDocumentMethod( "&&&", RequestElementName = "SubscriptionQueryRequest", RequestNamespace = "&&&", ResponseNamespace = "&&&", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped )]
    [return: XmlArray("Subscriptions")]
    [return: XmlArrayItem("Subscription", IsNullable = false)]
    public Subscription[] SubscriptionQuery(string SubscriberId, int SortType, bool SortDescending, string Service, string ReferenceID, string SubscriptionName, int StartingSequence, int ResultCount )
    {
        object[] results = this.Invoke( "SubscriptionQuery", new object[] {
                SubscriberId, 
                SortType, 
                SortDescending,
                Service,
                ReferenceID,
                SubscriptionName, 
                StartingSequence,
                ResultCount
        } );
        return ( (Subscription[])( results[0] ) );
    }

如您所见,我已经返回订阅。订阅列表位于返回数组的索引 0 中。我还想返回 Total Count 作为返回数组的索引 1,但 return XmlArray 语句只返回订阅并自动转换它们。

编辑:至少,我希望原始 XML 没有序列化它,我可以自己解析它。

注意:忽略 SoapDocumentMethod 中的“&&&”。我删除了它们的显示值。

【问题讨论】:

    标签: c# xml soap


    【解决方案1】:

    我的问题的解决方案是不让框架序列化 xml。

    [SoapDocumentMethod( "&&&", RequestElementName = "SubscriptionQueryRequest", RequestNamespace = "&&&", ResponseNamespace = "&&&", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped )]
    [return: XmlAnyElement]
    public List<XmlNode> SubscriptionQuery(string SubscriberId, int SortType, bool SortDescending, string Service, string ReferenceID, string SubscriptionName, int StartingSequence, int ResultCount )
    {
        object[] results = this.Invoke( "SubscriptionQuery", new object[] {
                SubscriberId, 
                SortType, 
                SortDescending,
                Service,
                ReferenceID,
                SubscriptionName, 
                StartingSequence,
                ResultCount
        } );
        return ( (List<XmlNode>)( results[0] ) );
    }
    

    这会将响应中的所有节点转换为一个列表,然后我可以在响应中获取我想要的每个单独的节点并自己反序列化它们,而不是让框架来做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2015-07-10
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多