我有以下SOAP XML
string soap = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:ns='http://schemas.abudhabi.ae/sso/2010/11'>" +
"<soapenv:Header/>" +
"<soapenv:Body>" +
"<ns:GetUserProfileResponse>" +
"<!--Optional:-->" +
"<ns:userid>?</ns:userid>" +
"<!--Optional:-->" +
"<ns:firstNameAr>?</ns:firstNameAr>" +
"<!--Optional:-->" +
"<ns:firstNameEn>?</ns:firstNameEn>" +
"<!--Optional:-->" +
"<ns:middleNameAr>?</ns:middleNameAr>" +
"<!--Optional:-->" +
"<ns:middleNameEn>?</ns:middleNameEn>" +
"<!--Optional:-->" +
"<ns:thirdNameAr>?</ns:thirdNameAr>" +
"<!--Optional:-->" +
"<ns:thirdNameEn>?</ns:thirdNameEn>" +
"<!--Optional:-->" +
"<ns:fourthNameAr>?</ns:fourthNameAr>" +
"<!--Optional:-->" +
"<ns:fourthNameEn>?</ns:fourthNameEn>" +
"<!--Optional:-->" +
"<ns:familyNameAr>?</ns:familyNameAr>" +
"<!--Optional:-->" +
"<ns:familyNameEn>?</ns:familyNameEn>" +
"<!--Optional:-->" +
"<ns:authLevel>?</ns:authLevel>" +
"<!--Optional:-->" +
"<ns:dateOfBirth>?</ns:dateOfBirth>" +
"<!--Optional:-->" +
"<ns:gender>?</ns:gender>" +
"<!--Optional:-->" +
"<ns:nationalityCode>?</ns:nationalityCode>" +
"<!--Optional:-->" +
"<ns:idn>?</ns:idn>" +
"<!--Optional:-->" +
"<ns:modifyTimestamp>?</ns:modifyTimestamp>" +
"<!--Optional:-->" +
"<ns:prefComChannel>?</ns:prefComChannel>" +
"<!--Optional:-->" +
"<ns:secretQuestionAnswer>?</ns:secretQuestionAnswer>" +
"<!--Optional:-->" +
"<ns:secretQuestionId>?</ns:secretQuestionId>" +
"<!--Optional:-->" +
"<ns:address>" +
"<!--Optional:-->" +
"<ns:additionalAddressInfo>?</ns:additionalAddressInfo>" +
"<!--Optional:-->" +
"<ns:city>?</ns:city>" +
"<!--Optional:-->" +
"<ns:fax>?</ns:fax>" +
"<!--Optional:-->" +
"<ns:residenceCountry>?</ns:residenceCountry>" +
"<!--Optional:-->" +
"<ns:poBox>?</ns:poBox>" +
"<!--Optional:-->" +
"<ns:stateOrEmirate>?</ns:stateOrEmirate>" +
"<!--Optional:-->" +
"<ns:streetNameAndNumber>?</ns:streetNameAndNumber>" +
"<!--Optional:-->" +
"<ns:zipCode>?</ns:zipCode>" +
"</ns:address>" +
"<!--Optional:-->" +
"<ns:contact>" +
"<!--Optional:-->" +
"<ns:email>?</ns:email>" +
"<!--Optional:-->" +
"<ns:mobilePhoneNumber>?</ns:mobilePhoneNumber>" +
"<!--Optional:-->" +
"<ns:website>?</ns:website>" +
"<!--Optional:-->" +
"<ns:workPhone>?</ns:workPhone>" +
"</ns:contact>" +
"</ns:GetUserProfileResponse>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
Run Code Online (Sandbox Code Playgroud)
我希望它解析或转换成以下类
public class UserProfile
{
public string FirstNameAR { get; set; }
public string FirstNameEN { get; set; }
public string MiddleNameAR { get; set; }
public string MiddleNameEN { get; set; }
public string ThirdNameAR { get; set; }
public string ThirdNameEN { get; set; }
public string FourthNameAR { get; set; }
public string FourthNameEN { get; set; }
public string FamilyNameAR { get; set; }
public string FamilyNameEN { get; set; }
public Boolean AuthLevelSpecified { get; set; }
public DateTime DateOfBirth { get; set; }
public bool DateOfBirthSpecified { get; set; }
public Boolean GenderTypeSpecified { get; set; }
public string NationalityCode { get; set; }
public string IDN { get; set; }
public Boolean ModifyTimeStampSpecified { get; set; }
public DateTime ModifyTimeStamp { get; set; }
// public PrefComChannelType PrefComChannelType { get; set; }
public Boolean PrefComChannelTypeSpecified { get; set; }
public string SecretQuestion { get; set; }
public int SecretQuestionId { get; set; }
public Boolean SecretQuestionSpecified { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的代码是:
var Value = XDocument.Parse(soap);
XNamespace ns = @"http://schemas.xmlsoap.org/soap/envelope/";
var unwrappedResponse = Value.Descendants((XNamespace)"http://schemas.xmlsoap.org/soap/envelope/" + "Body").First().FirstNode;
XmlSerializer oXmlSerializer = new XmlSerializer(typeof(UserProfile));
var responseObj = (UserProfile)oXmlSerializer.Deserialize(unwrappedResponse.CreateReader());
Run Code Online (Sandbox Code Playgroud)
我正在关注这个问题从soap消息中删除/提取soap标题和正文 但是我收到错误.这个Code有什么问题.请帮助
您需要使您的类名和属性名与XML中的名称匹配 - "GetUserProfileResponse"例如,请"firstNameAr"记住XML序列化区分大小写.或者,您需要使用控制XML序列化的属性将XML元素名称映射到类和属性名称.您还需要告诉XmlSerializer您的类是在"http://schemas.abudhabi.ae/sso/2010/11"命名空间中序列化的.
对您有用的属性是:
XmlRootAttribute - 允许您指定从给定类型及其名称空间创建的根元素的名称.
XmlElementAttribute - 允许您指定要序列化的类型的成员的元素名称.
从而:
[XmlRoot("GetUserProfileResponse", Namespace = "http://schemas.abudhabi.ae/sso/2010/11")] // Serialized with root element name "GetUserProfileResponse" in namespace "http://schemas.abudhabi.ae/sso/2010/11".
public class UserProfile
{
[XmlElement("firstNameAr")] // Serialized with element name "firstNameAr".
public string FirstNameAR { get; set; }
[XmlElement("firstNameEn")]
public string FirstNameEN { get; set; }
[XmlElement("middleNameAr")]
public string MiddleNameAR { get; set; }
[XmlElement("middleNameEn")]
public string MiddleNameEN { get; set; }
[XmlElement("thirdNameAr")]
public string ThirdNameAR { get; set; }
[XmlElement("thirdNameEn")]
public string ThirdNameEN { get; set; }
// Fix others similarly.
}
Run Code Online (Sandbox Code Playgroud)
有关更多说明,请参阅使用属性控制XML序列化.
您也可以自动生成课程.有关说明,请参阅从XML生成C#类.
| 归档时间: |
|
| 查看次数: |
15972 次 |
| 最近记录: |