惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
H
Heimdal Security Blog
K
Kaspersky official blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Schneier on Security
G
GRAHAM CLULEY
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
Google DeepMind News
Google DeepMind News
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
C
Cisco Blogs
Cyberwarzone
Cyberwarzone
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Jina AI
Jina AI
P
Proofpoint News Feed
P
Proofpoint News Feed
有赞技术团队
有赞技术团队
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog
IT之家
IT之家
S
Security Affairs
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
N
News | PayPal Newsroom
Cloudbric
Cloudbric
AWS News Blog
AWS News Blog
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
NISL@THU
NISL@THU

博客园 - Pvistely

SQL查询日历 怀旧下给自己留个备份, 小东西WinForm的等待窗口 PPPOE数据包转换及SharpPcap应用 Flash网页游戏辅助工具制作简析 Microsoft SQL Server 2008 基本安装说明 SQL 2000 异数据库数据同步 请把这个消息提示框拿掉,谢谢 MS新版Wallop, 被VB6搞死。。。。。。。鸟 企业管理应用系统平台插件接口应用说明 企业管理应用系统平台应用说明 企业管理应用平台预览演示版下载 企业管理系统应用平台(预览版) ENA13条码转换函数 运行时自定义PropertyGrid显示属性项目 C1Flexgrid与XtraGrid性能比较 继上次的GDI+做报表设计器后............. 想用GDI+2.0做设计器,但在实现过程中遇到大麻烦
FluorineFx ASObject自动转换基础类 AutoParseASObject ,用于Flash AMF协议解析
Pvistely · 2009-04-28 · via 博客园 - Pvistely

在做AMF协议应用时会遇到一个数据转换问题,也就是从ASObject转换成.NET的类

如:热血三国中的战场信息

  

转换为.NET中战场信息类

诸如此类的类型转换,可以利用AutoParseASObject来做为基础类进行自动解析,使用此基础类前先定义好相对应的数据库,类中FieldProperty名称必需与转换对象一至(有兴趣的朋友可以自己加类型属性,这样就更为灵活)

下面是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); }

    }

}