Fluorine的官方帮助是以AMF0和AMF3两个版本来讲解Flex AS3(以 下简称AS3)与Fluorine .NET之间(以下简称.NET)的数据类型转换的,此处我们仅以AMF3版本来介绍。几种数据类型转换方式中最方便的应该是AS3自定义对象转换为.NET值对象。
一、AS3转换成.NET(以ToNetType.mxml和ToNetType.cs为例)
1.基本类型的数据
比如说我们用一个方法要向服务器端发送一个人的基本信息:比如姓名、年龄和婚姻状况,可以简单地把姓名、年龄和婚姻状况作为该方法的参数 传递。参数的个数及前后位置要和.Net对应,参数一多,很容易出错。而且很多时候还需要用.Net再次转换。此类数据转换基本上是一一对应,和HTTP Service和Web Service差不 多,体现不了Remoting Service技术的优势。请参看源文件中的sendArgs方法。
2.数组类型
同样是上述情形,如果改用数组为参数,方法会看起来简洁很多。不过仍然数组的元素的前后位置也必须与服务器端一致。AS3数组通 过Fluorine转换为.NET的IList接口数据类型,详情请参看sendArray方法。
3.关联数组类型
联数组其实就是Object对象,它可以让我们动态添加属性。参数变成了Object对象的属性,再将Object对象高级参数传递,再也不用担心AS3 与.Net文件中方法的参数个数及顺序必须一致了。AS3关联数组通过Fluorine转换为.NET的Hashtable,请参看AssoArray方法。
4.VO数据类型
再通过Fluorine,我们可以将ActionScript 自定义对象(如Person.as)转换为.NET的值对象(VO)(如Person.cs),从而实现AS3与.NET的Mapping(映 射)。如sendVO方法,这两个类的类名可以不一样,属性名和属性个数都可以不一样(为了好记,最好相同)。实现映射有以下两种方法:
(1) 在ActionScript 类中注册类的别名。使用RemoteClass(alias=".Net全限定类名");
(2) 在web.config 文件中添加classMappings节点。
<classMappings> <classMapping> <type>.Net全限定名</type> <customClass>AS3全限定类名</customClass> </classMapping> </classMappings>
在某些情况下第一种方法失效,可以尝试第二种方法。很显然,用值对象向.NET传递数据是最方便的。
当然还有ByteArray数据类型也是很重要的,比如说常见的大头拍应用,传统的方法在服务器端进行二进制编码,很麻烦效率也很差。如果用 Fluorine对AS3和.NET都直接使用ByteArray数据类型,那就方便高效多了。