最近在對接一個銀行的項目,大概就是類似一個錢包的功能,在請求返回的數據時,發現返回的數據標准的XML格式的支付串,格式如下
<kColl id="inputOrig" append="false">
<field id="currency" value="RMB" append="false"/><field id="amount" value="0.01" append="false"/>
<field id="masterId" value="2000311146" append="false"/>
<field id="objectName" value="訂單匯支付" append="false"/>
<field id="orderId" value="20003111462016092317091311" append="false"/>
<field id="paydate" value="20160923170913" append="false"/>
<field id="remark" value="訂單匯支付" append="false"/>
<field id="validtime" value="120" append="false"/>
</kColl>
用常規的XML解析解析出來的數據是一個List,不能達到預期的目的,於是想到使用反射來解決這個問題。
代碼如下:
/// <summary>
/// 支付結果解析
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parm"></param>
/// <param name="orig"></param>
/// <returns></returns>
public static T XMLParsing<T>(T parm, string orig)
{
Type t = parm.GetType();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(orig);
foreach (XmlElement book in xmlDocument.SelectNodes(@"kColl/field"))
{
foreach (PropertyInfo pi in t.GetProperties())
{
if (pi.Name.ToLower() == book.GetAttribute("id").ToLower())
{
pi.SetValue(parm, book.GetAttribute("value"), null);
}
}
}
return parm;
}
orig為原始XML字符串,格式如上,用反射來判斷實體類中的參數名是否等於XML field節點中的id,如果相等,給這個實體類中的參數賦值。
第一次寫博客,希望大家多多支持。
