目前我正在将应用程序从C#转换为ActionScript(Silverlight到Flex),我需要在ActionScript中序列化一些XML内容。
现在,不幸的是,我需要变量的名称不是XML文件中的节点。我尝试了一个使用getter和setter的解决方法。它适用于设置变量,但我在getter上失败了,因为当你将变量设为私有时,原生AS3'SimpleXMLEncoder'会忽略它。
如果我可以给变量赋予别名,那么最好的解决方案就是。这就是它在C#中的工作方式。就像这样:
[DataMember(Name = "some")]
public someVariable Type { get; set; }
在ActionScript中有什么方法可以做类似的事情吗?我只发现了这个类,它适用于类:
[RemoteClass(alias="user")]
我希望我能很好地描述我的第一个问题,而且我的英语还可以。谢谢。 :)的
答案 0 :(得分:2)
这很有趣,因为在看到它是多么方便C#之后,我刚刚写完了其中一个用于工作。我们可能会很快将其作为库发布,但在此之前,我可以指向SpiceLib的方向,特别是有关使用自定义元数据here的部分。
我们所做的是定义我们自己的元数据(属性)标签,称为'DataMember',然后创建一个序列化器,将Typed类转换为动态对象,如:
[DataMember(Name="some")]
public var someVariable:Type;
//in Type, no MetaTags means we use the given accessor
public var someName:String;
//becomes {some:{someName:""}}
然后,我们通过Adobe JSON编码器运行此动态对象,或使用Flex XML序列化程序。
希望这会有所帮助,如果我们发布我们的图书馆,会通知您。
答案 1 :(得分:0)
不确定是否有办法在类本身中执行此操作,但是您是否可以向类中添加一个方法,该方法输出一个用于XML序列化的新对象,并将其传递给SimpleXMLEncoder?在您返回的对象中,无论类中的实际变量名称如何,您都会将其设置为您希望它们成为的名称。