因為傳回的資料有不同的型態,原本是想傳<T>到一個函式,然後判斷是否為null,再回傳相對應型態的值到class中儲存,同時還要判斷xml中是否有該元素存在,剛剛想不到有什麼比較好的方式,在Google一下,發現有這招,感覺蠻酷的!!下面是搭配網路上的作法所寫成的程式碼片段,可以參考看看。
XDocument xdoc = XDocument.Parse(xml);
XNamespace xName = xdoc.Root.GetDefaultNamespace();
UserInfo userInfo = newUserInfo();
userInfo.UserName = checkElementIsAvailable<string>(xdoc, xName, "UserName");
userInfo.NickName = checkElementIsAvailable<string>(xdoc, xName, "NickName");
userInfo.ErrorCode = checkElementIsAvailable<int>(xdoc, xName, "ErrorCode");
userInfo.IsConsent = checkElementIsAvailable<bool>(xdoc, xName, "IsConsent");
///<summary>
///檢查XML元素是否存在
///</summary>
private T checkElementIsAvailable<T>(XDocument xdoc, XNamespace xName, string elementName)
{
if (xdoc.Root.Element(xName + elementName) != null)
{
string str = xdoc.Root.Element(xName + elementName).Value;
switch (Type.GetTypeCode(typeof(T)))
{
case TypeCode.Boolean: return (T)(object)Convert.ToBoolean(str);
case TypeCode.Int32: return (T)(object)Convert.ToInt32(str);
case TypeCode.String: return (T)(object)Convert.ToString(str);
default: thrownew Exception("未處理的型態");
}
}
else
{
switch (Type.GetTypeCode(typeof(T)))
{
case TypeCode.Boolean: return (T)(object)false;
case TypeCode.Int32: return (T)(object)0;
case TypeCode.String: return (T)(object)string.Empty;
default: thrownew Exception("未處理的型態");
}
}
}
參考資料:
http://www.myexception.cn/linq/326458.html
http://www.dotblogs.com.tw/darrent/archive/2010/12/02/19850.aspx
http://frankiestudy.blogspot.tw/2012/09/c.html
留言列表