Comment décoder et fonte chaîne JSON en Flex?
Je suis en utilisant as3corelib pour décoder/encoder les chaînes JSON. Dans ma petite expérience, je veux encoder
un objet (UserInfo
) à chaîne JSON et le décoder à l'objet, mais il semble échouer à la conversion de point (la dernière ligne), pourquoi serait-ce possible? comment puis-je le faire fonctionner?
La UserInfo
classe
public class UserInfo
{
public var levelProgress : int;
}
Le code de conversion
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?
OriginalL'auteur Eran Betzalel | 2009-09-20
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de faire quelque chose de semblable à ce que cette page dit: http://benrimbey.wordpress.com/2009/06/20/reflection-based-json-validation-with-vo-structs/
Le problème avec votre code que vous essayez de abattu un Objet natif dans une instance de la Classe spécifique qu'il ne sait rien. Les structures de votre deux types sont différents. UserInfo hérite de l'Objet (une sorte de funky AS3 en raison de la façon dont les Classes sont compilés), mais b est un Objet simple.
OriginalL'auteur Glenn
Pour info si vous êtes juste faire du décodage JSON, et c'est un Flex app, pas AIR. Vous n'avez pas besoin de la as3Corelib paquet pour le faire. Vous pouvez simplement utiliser le parent du navigateur interpréteur JavaScript comme ceci:
var myJSONString:String = "{name:'Joe',age:35}";
var myObj:Object = ExternalInterface.call('eval', "("+myJSONString+")");
Cela pourrait sauver votre utilisateur en quelques Ko sur le téléchargement.
OriginalL'auteur Bernesto
De Glenn lien vraiment fait le tour. J'ai également ajouté une conversion entre dot-net et AS3 - il semble que dot-net, écrit l' __type d'attribut comme suit: "Catégorie:espace de Noms", mais AS3 doit être comme suit: "Namespace.Class".
BTW, si vous êtes à l'aide de Glenn du lien et de la FMC serveur, assurez-vous de remplacer "clientClassPath" dot-net "__".
OriginalL'auteur Eran Betzalel
Pouvez également faire de la coulée dans la VO du constructeur.
et de l'utiliser comme ceci:
OriginalL'auteur shi11i