程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> FluorineFx ASObject自動轉換基礎類AutoParseASObject

FluorineFx ASObject自動轉換基礎類AutoParseASObject

編輯:關於.NET

該類用於Flash AMF協議解析

在做AMF協議應用時會遇到一個數據轉換問題,也就是從ASObject轉換成.NET的類

如:熱血三國中的戰場信息

轉換為.NET中戰場信息類

諸如此類的類型轉換,可以利用AutoParseASObject來做為基礎類進行自動解析,使用此 基礎類前先定義好相對應的數據庫,類中Field或Property名稱必需與轉換對象一至(有興趣 的朋友可以自己加類型屬性,這樣就更為靈活)

下面是AutoParseASObject代碼,當然除了AMF數據對象轉換也可以應用於其他數據轉換過 程中,如數據庫結構類,JSON數據等的處理,

原理是利用Type來自動創建實例對象,並將相關數據值自動進行類型轉換,得到一個新的 實例,

有人或許會想,是否可以動態創建一個數據類呢,這個是完全可以實現的,利用.NET的動 態編譯完全可以做到,具體怎麼實現我就不寫了,應該更為簡單.

代碼實現:(郁悶發布那個插入代碼用起來好不爽....=.=還是直接帖一下得了)

public class AutoParseASObject<T>

{

    public static T Parse(ASObject pObj)

    {

        try

        {

            Type tmpType = typeof(T);

            T tmpRstObj = (T)Activator.CreateInstance(tmpType);

            MemberInfo[] tmpMembers = tmpType.GetMembers();

            for (int i = 0; i < tmpMembers.Length; i++)

            {

                var tmpVar = from value in pObj

                             where value.Key.ToLower () == tmpMembers[i].Name.ToLower()

                             select value.Value;

                using (IEnumerator<object> tmpEnum = tmpVar.GetEnumerator())

                    if (tmpEnum.MoveNext())

                    {

 

                        switch (tmpMembers[i].MemberType)

                        {

                            case MemberTypes.Field:

                                tmpType.GetField (tmpMembers[i].Name).SetValue(tmpRstObj, Convert.ChangeType(tmpEnum.Current, tmpType.GetField(tmpMembers[i].Name).FieldType));

                                break;

                            case MemberTypes.Property:

                                if (tmpType.GetProperty(tmpMembers[i].Name).CanWrite)

                                    tmpType.GetProperty(tmpMembers[i].Name).SetValue(tmpRstObj, Convert.ChangeType (tmpEnum.Current, tmpType.GetProperty(tmpMembers[i].Name).PropertyType), null);

                                break;

                        }

                    }

            }

            return tmpRstObj;

        }

        catch { return default(T); }

    }

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved