【问题标题】:convert class to object actionscript 3将类转换为对象动作脚本 3
【发布时间】:2014-09-02 11:07:58
【问题描述】:

我正在尝试将类转换为 json。

班级是:

package com.globalData{

    public class userSite {
        private var uID:int,uName:String,uSocket:int,uZone:int,uRoom:int;
        public function user(ID:int,Name:String,ZoneID:int,RoomID:int,socketID:int){
            uID = ID;
            uName = Name;
            uSocket = socketID;
            uZone = ZoneID;
            uRoom = RoomID;
        }

        public function getName():String{
            return uName;
        }
        public function getID():int{
            return uID;
        }
        public function getZoneID():int{
            return uZone;
        }
        public function getRoomID():int{
            return uRoom;
        }
        public function getSocket():int{
            return uSocket;
        }
    }
}

我试图这样做:

json(Object(roomVar));

但它不起作用(JSOn 是主类上的函数)

我需要将类转换为 json 并发送 json -> Socket 我该怎么做?

【问题讨论】:

  • 你应该发布json函数的代码。
  • public function json(obj){ return com.adobe.serialization.json.JSON.decode(obj); }
  • 您说“将类转换为 JSON”,但我怀疑您的意思是真的将内容数据类转换并发送?既然您已经在检索 NamesocketID 之类的东西,就不能将它们放入字符串甚至数组/对象中并将其作为 JSON 数据发送吗? This link 可能会有所帮助(请参阅 Adam Harte 的回答)

标签: json actionscript-3 class sockets actionscript


【解决方案1】:

上面的代码存在一些问题:

  1. 您的userSite 类似乎没有构造函数。相反,您选择了一个 user 函数来接收所有初始化参数
  2. 您正在使用可能应该使用访问器方法的函数,有时称为getter

    • public function getName():String { return uName;} 将变为 public function get name():String { return uName;}
    • 而不是调用getName(),您可以访问name 作为属性:instance.name
  3. 您正在尝试将Object 传递给JSON.decode 方法,此方法需要String"{ 'a':1, 'b':[1,2,3] }" 之类的参数是可接受的参数。这将返回一个具有两个属性ab 的对象,a 将包含值1b 将包含一个包含元素123 的数组.您正在寻找的实际上是JSON.encode 方法,它接受Object 并将其转换为String(可以解析为JSON)。

我建议您将所有getXYZ() 函数转换为访问器,这将允许将该类的实例作为属性集合读取,这反过来又允许JSON.encode 函数创建JSON来自它的字符串对象:

package com.globalData
{

        public class UserSite {
            private var uID:int,uName:String,uSocket:int,uZone:int,uRoom:int;
            public function UserSite(ID:int,Name:String,ZoneID:int,RoomID:int,socketID:int):void{
                uID = ID;
                uName = Name;
                uSocket = socketID;
                uZone = ZoneID;
                uRoom = RoomID;
            }

            public function get name():String{
                return uName;
            }
            public function get ID():int{
                return uID;
            }
            public function get zoneID():int{
                return uZone;
            }
            public function get roomID():int{
                return uRoom;
            }
            public function get socket():int{
                return uSocket;
            }
        }
    }

用法:

var roomVar:UserSite = new UserSite(1, 'Name', 2, 3, 4);
trace(JSON.encode(roomVar as Object));

输出:

{"ID":1,"name":"Name","socket":4,"roomID":3,"zoneID":2}

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多