为了账号安全,请及时绑定邮箱和手机立即绑定

反序列化部分 SOAP 响应

反序列化部分 SOAP 响应

C#
拉丁的传说 2023-08-20 10:07:03
我对肥皂响应的特定部分的反序列化有点迷失。响应:<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>    <ns1:LoginResult xmlns:ns1="http://abc.def.schema">        <sessionId>123456789</sessionId>        <sessionTimeout>30</sessionTimeout>        <organizationName>WebService Test Account XYZ</organizationName>        <userInfoResult>            <accessibleOrgs>                <name>WebService Test Account XYZ</name>                <description/>                <prefix>10</prefix>                <countryCallingCode>+49</countryCallingCode>                <treeLevel>0</treeLevel>                <timeZone>                    <timeZoneId>Europe/Berlin</timeZoneId>                    <currentUtcOffset>3600000</currentUtcOffset>                </timeZone>                <billingCompany>COMPANY 123</billingCompany>                <language>DE</language>            </accessibleOrgs>            <isDemo>true</isDemo>            <prefixLength>0</prefixLength>            <alarmNumberLength>0</alarmNumberLength>            <groupNumberLength>0</groupNumberLength>            <personNumberLength>0</personNumberLength>        </userInfoResult>    </ns1:LoginResult></soapenv:Body>我需要反序列化“LoginResult”部分。我知道反序列化方法,但我正在努力解决以下事实:A) 有命名空间,B) 我只需要 XML 的子集。也许有人可以指出我正确的方向。
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

从 LoginResult 类的定义开始。


[XmlRootAttribute(Namespace = "http://abc.def.schema", IsNullable = false, ElementName = "LoginResult")]

public class LoginResult

{

    [XmlElement(Namespace ="")]

    public int sessionId { get; set; }


    [XmlElement(Namespace = "")]

    public string organizationName { get; set; }


     ..... some more properties

}

  1. 使用XDocument类来System.Xml.Linq解析 xml。

  2. 找到“LoginResult”元素。

  3. 反序列化为LoginResult类型。

var xDoc = XDocument.Parse(str);

var xLoginResult = xDoc.Root.Descendants().FirstOrDefault(d => d.Name.LocalName.Equals("LoginResult"));

var serializer = new XmlSerializer(typeof(LoginResult));

using (var reader = xLoginResult.CreateReader())

{                

    var result = (LoginResult)serializer.Deserialize(reader);

}


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信