不想多说,一言不合上代码:
待转换的XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <response totalCount="1" resultCode="SUCCESS" resultMessage=""> <profile lastName="李" firstName="*" dateOfBirth="XX0816" age="" gender="1" address="浙江省 杭州富阳市 东州贸有限公" email="slll@163.com" cellEmail="" socialMedia="" homePhone="" cellPhone="199925" contactabiltyMail="1" contactabiltyEmail="1" contactabiltyCellEmail="0" contactabiltyHomePhone="1" contactabiltyCellPhone="1" contactabiltyText="1" contactabiltySocialMedia="0" vipLevel="2" memberId="OC540C00016824" saAccount="660996" class="小姐" homeStoreCode="OC54"/> <purchaseHistory> <departmentPurchase totalTYAmount="21705" totalTYUnitCnt="9" firstTxn="20160713" lastTxn="20160829" totalLifeTimeSale="36791"> <department categoryName="D02" tyAmount="8985" tyUnitCnt="4"/> <department categoryName="D08" tyAmount="2970" tyUnitCnt="2"/> <department categoryName="D01" tyAmount="9750" tyUnitCnt="3"/> </departmentPurchase> <ratePurchase totalLyAmount="0" totalLyRate="0" totalTyAmount="21705" totalTyRate="100" totalLifeTimeAmount="36791" totalLifeTimeRate="100"> <rate categoryName="Retail" lyAmount="" lyRate="0" lyToDate="0" tyAmount="21705" tyRate="100" tyToDate="21705" lifeTimeAmount="36791" lifeTimeRate="100" lyTyChange="100"/> </ratePurchase> <storeRatePurchase> <storeRate/> </storeRatePurchase> </purchaseHistory> <vipStatus issueDate="20140629" issueShop="OC54" ptsToUpgrade="21705" expiryDate="20170731" upgradeShop="" ptsToRenew="8130"/> <comments comment=""/> </response>转换方法:
/// <summary> /// 指定XML字符串序列化成对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="xml"></param> /// <returns></returns> public static T DeserializeForXml<T>(string xml) where T : class,new() { System.IO.StringReader stringReader = null; try { if ((Serializer == null)) { Serializer = new XmlSerializer(typeof(T)); } stringReader = new StringReader(xml); T result = Serializer.Deserialize(stringReader) as T; return result; } finally { if ((stringReader != null)) { stringReader.Dispose(); } } }调用方法:
rpXML = XMLHelper.DeserializeForXml<CustomerDetails.Response>(returnXML);T:Response
/// <summary> /// 返回结果(根节点) /// </summary> [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml","4.0.30319.34209")] [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "",IsNullable = false,ElementName = "response")] public class Response { /// <summary> /// /// </summary> [System.Xml.Serialization.XmlAttributeAttribute()] public string resultCode { set; get; } /// <summary> /// /// </summary> [System.Xml.Serialization.XmlAttributeAttribute()] public string resultMessage { set; get; } /// <summary> /// /// </summary> [System.Xml.Serialization.XmlElementAttribute("profile",typeof(Profile))] public Profile profile { set; get; } /// <summary> /// /// </summary> [System.Xml.Serialization.XmlElement("department",typeof(Department),Form = System.Xml.Schema.XmlSchemaForm.Unqualified,Order = 0)] public List<Department> department { get; set; } }特别注意,如果XML节点有对应的List对象,那么 typeof(Department)一定要这么写,不能是其他的!