FluorineFX框架下的.NET和FLEX当中数据转换(自定义类型)

来源:互联网 发布:淘宝怎么申请卖保健品 编辑:程序博客网 时间:2024/06/05 17:06

一些基础的数据,比如int,string都是直接可以转换过去的,不需要其他的步骤,只需要配置好了,就可以转换。

这篇博文,学习如何转化自定义类型,也就是所谓的类。

使用这个有两种方法

我首先把.NET当中的代码贴出来

using System;using System.Collections.Generic;using System.Linq;using System.Web;using FluorineFx;/// <summary>///studentLab 的摘要说明/// </summary>namespace School.Po{     [RemotingService]    public class StudentLab    {        public string studentId { get; set; }        public int floorIndex { get; set; }        public int floorFid { get; set; }        public StudentLab()        {        }        public StudentLab getStudentLab()        {            StudentLab sl = new StudentLab();            sl.studentId = "12345";            sl.floorIndex = 3;            sl.floorFid = 45;            return sl;        }    }}


第一种:在FLEX中

只需要添加[RemoteClass(alias="School.Po.StudentLab")],在类前面。

package vo{[RemoteClass(alias="School.Po.StudentLab")]public class StundetVo{public function StundetVo(){}public var studentId:String;public var floorIndex:int;public var floorFid:int;}}

需要注意的是两点,第一点就是刚才说的,添加相应的远程类。第二个就是各个属性之间,名字必须保持一致,包括大小写,否则不知道怎么对应。

我们这个时候,测试一下代码正确性。下面是FLEX一个测试代码。

<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    xmlns:s="library://ns.adobe.com/flex/spark"    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"><s:layout><s:BasicLayout/></s:layout><fx:Script><![CDATA[import mx.rpc.events.ResultEvent;import vo.StundetVo;protected function button1_clickHandler(event:MouseEvent):void{ro.getStudentLab();}protected function ro_resultHandler(event:ResultEvent):void{var s:StundetVo=event.result as StundetVo;trace(s.studentId);trace(s.floorFid);trace(s.floorIndex);}]]></fx:Script><fx:Declarations><s:RemoteObject id="ro" destination="fluorine" source="School.Po.StudentLab" result="ro_resultHandler(event)"/></fx:Declarations><s:Button x="41" y="24" label="开始" click="button1_clickHandler(event)"/></s:Application>
我debug一下,下面是贴图


我们很容易可以看到,result自动转化为我们设计的类。s,下面的数据,也保存着相关属性信息。如果我们删除,远程类,这句话,就会出现以下错误。

TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at test/ro_resultHandler()[D:\flrxwp\fx\src\test.mxml:22]
at test/__ro_result()[D:\flrxwp\fx\src\test.mxml:31]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.rpc::AbstractService/dispatchEvent()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\AbstractService.as:333]
at mx.rpc.remoting.mxml::RemoteObject/dispatchEvent()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\remoting\mxml\RemoteObject.as:148]
at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:254]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318]
at mx.rpc::Responder/result()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:56]
at mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84]
at NetConnectionMessageResponder/resultHandler()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:547]
at mx.messaging::MessageResponder/result()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:235]


这是第一种方法,不过一些情况下,也会出错。

我们来看第二种方法

2:在.NET当中,修改web.config

不过这个我没有实验成果,还希望有人帮忙指正一下,所有的代码和上面的一样,就除了,没有[RemoteClass(alias="School.Po.StudentLab")]。

在<fluorinefx>
<settings>

下面添加以下配置

<classMappings>
        <classMapping>
          <type>School.Po.StudentLab</type>
          <customClass>vo.StundetVo</customClass>
        </classMapping>
      </classMappings>

我没有成果!不知道还有什么其他地方,需要修改不