XML帶多屬性解析為一個實體類(利用反射)


最近在對接一個銀行的項目,大概就是類似一個錢包的功能,在請求返回的數據時,發現返回的數據標准的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,如果相等,給這個實體類中的參數賦值。

 

第一次寫博客,希望大家多多支持。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM