代码之家  ›  专栏  ›  技术社区  ›  Eran Betzalel

如何在flex中解码和转换json字符串?

  •  5
  • Eran Betzalel  · 技术社区  · 17 年前

    我在用 as3corelib 解码/编码json字符串。在我的小实验中我想编码 物体(物体) UserInfo )对于json字符串并将其解码回对象,但是它似乎在转换点(最后一行)失败,为什么会发生这种情况?我怎样才能让它发挥作用?

    这个 用户信息 班

    public class UserInfo
    {
        public var levelProgress    : int;
    }
    

    转换码

    var user1:UserInfo = new UserInfo() 
    user1.levelProgress = 20;
    
    var a:String = JSON.encode(user1);
    var b:Object = JSON.decode(a);
    var c:UserInfo;
    
    c = b as UserInfo;  // c gets null, why?
    
    4 回复  |  直到 14 年前
        1
  •  3
  •   Glenn    17 年前

    你需要做一些与本页内容类似的事情: http://benrimbey.wordpress.com/2009/06/20/reflection-based-json-validation-with-vo-structs/

    代码的问题在于,您试图将本机对象下推到它一无所知的特定类实例中。两种类型的结构是不同的。userinfo继承自对象(由于类的编译方式,有点像as3),但是b是一个简单的对象。

        2
  •  2
  •   Bernesto    15 年前

    仅供参考,如果你只是做json解码,它是一个flex应用,而不是air。这样做不需要as3corelib包。您可以使用父浏览器的JavaScript解释器,像这样:

    var myJSONString:String = "{name:'Joe',age:35}"; var myObj:Object = ExternalInterface.call('eval', "("+myJSONString+")");

    这可能会在下载时为您的用户节省几KB。

        3
  •  1
  •   Eran Betzalel    17 年前

    格伦的链接真的做到了。我还添加了一个dot net和as3之间的转换-dot net似乎编写了类似于so的“class:namespace”的“uu type”属性,但是as3需要类似于so的“namespace.class”。

    private static function convertDotNetToASNameType(nameType:String):String            
    {
        return(nameType.split(':').reverse().join('.'));
    }
    

    顺便说一句,如果您使用的是Glenn的链接和WCF服务器,请确保将“ClientClassPath”替换为Dot Net的“uuu type”。

        4
  •  0
  •   Xavi Arik G    14 年前

    也可以在vo的构造函数中进行转换。

    public class YourVO
    {
    
        public var id:int;
        public var prop1:String;
        public var prop2:String;
        public var prop3:String;
    
        public function YourVO(jsonObject : Object)
        {
            for (var p:String in jsonObject) {
                if( this.hasOwnProperty(p) ){
                    this[p] = jsonObject[p];
                }
            }
        }
    
    }
    

    像这样使用它:

    var yourVO:YourVO = new YourVO( jsonObject );
    
    推荐文章