在Flex中,使用
可以轻松地将XML转换为Object和ArrayCollectionvar decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
decoder.decodeXML( xml );
但是有一种将ArrayCollection转换为XML的好方法。 我在互联网上搜索了一段时间,但没有找到任何答案。
感谢。
答案 0 :(得分:4)
看看这个使用SimpleXMLEncoder的例子:
<mx:Script>
<![CDATA[
import mx.rpc.xml.SimpleXMLEncoder;
import mx.utils.ObjectUtil;
import mx.utils.XMLUtil;
import mx.collections.ArrayCollection;
private var items:ArrayCollection;
private function onCreationComplete():void
{
var source:Array = [{id:1, name:"One"}, {id:2, name:"Two"}, {id:3, name:"Three"}];
var collection = new ArrayCollection(source);
trace(objectToXML(collection.source).toXMLString());
}
private function objectToXML(obj:Object):XML
{
var qName:QName = new QName("root");
var xmlDocument:XMLDocument = new XMLDocument();
var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument);
var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(obj, qName, xmlDocument);
var xml:XML = new XML(xmlDocument.toString());
return xml;
}
]]>
</mx:Script>
...产生以下XML:
<root>
<item>
<id>1</id>
<name>One</name>
</item>
<item>
<id>2</id>
<name>Two</name>
</item>
<item>
<id>3</id>
<name>Three</name>
</item>
</root>
我应该注意到了objectToXML函数from Peter de Haan's blog,但是人们显然对SimpleXMLEncoder类有一些问题。在我自己的测试中,编码简单对象效果很好(如上所述),但复杂类型往往会产生不可预测的结果。 (例如,对Font对象数组进行编码会产生一长串空项目节点。)
但是根据您尝试序列化的类型,这种方法可能会对您有所帮助。希望它有所帮助!
答案 1 :(得分:1)
为什么不使用SimpleXMLEncoder转换ArrayCollection的toArray()方法返回的数组?
答案 2 :(得分:0)
您可以尝试使用descibeType()方法接受一个对象并将其转换为xml - 但我认为这只是转换类大纲?可能是一个开始。