FluorineFx ASObject自动转换基础类 AutoParseASObject ,用于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); }
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix