How to I pass Vector.<> from Flash with ExternalInterface - actionscript-3

I have a custom container (C#) for the Flash ActiveX control and am passing data back and forth. Previously I would use ExternalInterface.call and pass an Array as a parameter. I would prefer to use the Vector class now that it is available, but it appears that when I do that the call is never made.
It is however made if it is embedded in IE. It appears that when in IE, Flash will send out JavaScript to execute rather than serializing to XML. My guess is that the Vector XML serialization isn't baked in, so Flash just ignores the call.
Anyone have any ideas? Other than just going back to using Array, I've already done that for now.

The docs note that:
Other built-in or custom classes -
ActionScript encodes other objects as
null or as an empty object. In either
case any property values are lost.
It's not completely clear what that means, since custom classes are also Objects - I guess only vanilla objects count? But at any rate it looks like Vector falls into that "other built-in classes" category, so you'll need to either use Array, or re-cast to Array before you pass the data.

you can use arrays with [ArrayElementType("type")] instead. or write a serialization function for Vector

Related

angular and turning json data into real objects (and vice-versa)

To keep this simple:
I have classes defined in typescript which have methods and properties (with lots of getter/setter logic). I then retrieve json data matching such classes. I need to be able to project these json objects into my "smart" classes. I know about class transformer but I wonder if this is really go-to approach to do this kind of stuff. Furthermore, I'm planning on using ngrx, so this whole class-transformation just looks wrong (server to json, json to state, state to class? and viceversa? I just dont see a clear pattern.
Any clarity is appreciated. Thanks!
I'm doing almost exactly what you describe in a fairly large app.
I'm using class-transformer to transform the JSON from http calls to instances of the appropriate objects, and then using the resulting objects as state in a store (except that I'm using Redux instead of ngrx).
I find that it works very well.
I'm not sure exactly what you mean by "server to json, json to state, state to class? and viceversa?".
For me (using your terminology), it's server to json, json to class, class to state
(but state is just a collection of objects, i.e. class instances. I.E. state is objects).
If I need to send state back to the server, then yes, I typically pull the appropriate objects from the store, serialize them to JSON, and send them to the server. But...the Angular HttpClient does the serialization for you, so you don't typically have to write that part, unless you need some custom serialization.

what is the best way to use a custom json converter to convert a complex object?

I'm using asp.net core to create a webapi project.
When an object is posted to my action, I want to use the custom converter to analyse the json object first.And then create an instance of a child class. For the child, instance I only want to customize one property. So the question is, what if the object gets complex, I want to use the standard conversion to get the whole object, and manually manipulate one property.
What is the best way of achieving this?
You can add only the properties you want to your View Model, the rest will be ignored.
I eventually figured this out. For all the properties that you don't want to use custom deserialization you can still use the string.ToObject() to convert. Just do not use ToObject method on the very class that you originally created the converter for. It will craete an infinite loop trying to convert itself again and again.

converting gwt shared object to json

Could someone explain to me why in GWT you cannot convert a client/shared pojo (that implements Serializable) into a JSON object without jumping through a load of hoops like using the AutoBeanFactory (e.g GWT (Client) = How to convert Object to JSON and send to Server? ) or creating javascript overlay objects (and so extends JavaScriptObject)
GWT compiles your client objects into a javascript object, so why can't it then simply convert your javascript to JSON if you ask it to?
The GWT JSON library supplied only allows you to JSONify java objects that extend JavaScriptObject
I am obviously misunderstanding something about GWT since a GWT compiles a simple java POJO into a javascript object and in javascript you can JSON.stringify it into JSON so why not in GWT?
GWT compiles your app, it doesn't just convert it. It does take advantage of the prototype object in JavaScript to build classes as it needs, usually following your class hierarchy (and any GWT classes you use), but it makes many other changes:
Optimizations:
Tightens up types - if you refer to something as List, but it can only be an ArrayList, it rewrites the type declarations. This by itself doesnt give much, but it lets other steps do better work, such as
Making methods static - if nothing ever overrides ArrayList.add, for example, this will turn any calls it can prove are to ArrayList.add into a static call, preventing the need for dynamic dispatch, and allowing the 'this' string in the final JS to be replaces with a shorter arg name. This will prevent a JS object from having a method you expect it to have.
Inline Methods - if a method is simple enough, and is called in few enough places, the compiler might remove the method entirely, since it knows all places where it is called. This will directly affect your use case.
Removes/Inlines unreferenced fields - if you read to a field but only write it once, it will assume that the original value is a constant. If you don't read it, there is no reason to assign it. Values that the compiler can't tell will ever be used don't need to be using up space in the js and time in the browser. This also will directly affect treating gwt'd Java as JS.
After these, among others, the compiler will rename fields, arguments, and types to be as small as possible - rarely will a field or argument be longer than 1 character when this is complete, since those are most frequently used and have the smallest scope, so can be reused the most often by the compiler. This too will affect trying to treat objects as JSON.
The libraries that allow you to export GWT objects as JSON do so by making some other assumption.
JavaScriptObject (JSO) isn't a real Java object, but actually represents a JavaScript instance, so you can cast back and forth at will - the JSNI you write will emerge relatively unoptimized, as the compiler can't tell if you are trying to talk to an external library.
AutoBeans are generated to assume that they should have the ability to write out JSON, so specific methods to encode objects are written in. They will be subject to the same rules as the other Java that is compiled - code that isn't used may be removed, code that is only called one way might be tightened up or inlined.
Libraries that can export JS compile in Java details into the final executable, making it bigger, but giving you the ability to treat these Java objects like JS in some limited way.
One last point, since you are talking both about JSON and Javascript - Some normal JS isn't suitable for writing out as JSON. Date objects don't have a consistent way to serialize that is recognized by JSON. Non-tree object graphs can't be serialized:
var obj = {};
obj.prop = {};
obj.prop.obj = obj;
Autobeans come with a built in checker for these circular references, and I would hope the JSO serialization does as well.

Need .NET controls serialization

I need to serialize every control of a .NET managed process (whether it's main form, child controls like buttons, calender, text boxes, list boxes, combos, etc). Every simple class object is easily serializable/deserializable using binary formaters, but these controls (which I got their info through reflection(Type.GetFields(), Type.GetProperties())) are not serializing through this serialization method which I described.
It throws a "type System.Forms.Form.WinForm to be serialize" exception. After serialization I need to pass the control's information as it is, to another remote process.
How can I get the .NET control's information to be serializable? (Json?)
I believe http://www.codeguru.com/forum/archive/index.php/t-421612.html has an answer for you

how to enumerate object tag parameters from loader page via AS3?

I have a few object params in HTML page I like to enumerate, what is the easiest method?
I would like to use for loop to go through each param and insert them into my own Array.
If you are referring to the parameters of the <object> element (such as allowfullscreen, wmode, quality, etc.), I don't think there is a generic way of accessing these values from within AS3. To access these values, I guess you probably need to have some sort of mechanism outside flash to pass these parameters to the flash object. E.g., you could use SWFObject to generate the embedding code, and pass the array meant to be used as params in the flashvars argument as well.
If, on the other hand, you mean the value of the flashvars parameter, i.e., those values which are meant to be passed to the flash object, you can access these values via the Applicaiton.application.paramaters object (keys are parameter names, values are corresponding values). In case of a plain AS3 project, the same array can be accessed via root.loaderInfo.parameters.
HTH