因為傳回的資料有不同的型態,原本是想傳<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

 

arrow
arrow
    全站熱搜

    小賢 發表在 痞客邦 留言(0) 人氣()