public void WriteData(AMFWriter writer, object data) { if (data is ArrayCollection) { writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); } else if (data is IList) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array((IList)data); } else if (data is IDictionary) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3AssociativeArray((IDictionary)data); } else { writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); } }
public void WriteData(AMFWriter writer, object data) { if (data is ArrayCollection) { writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); return; } //TODO: configure somehow Vector support /* * if (CollectionUtils.IsGenericListType(data.GetType())) * { * Type itemType = ReflectionUtils.GetListItemType(data.GetType()); * switch (Type.GetTypeCode(itemType)) * { * case TypeCode.Int32: * writer.WriteByte(AMF3TypeCode.IntVector); * writer.WriteAMF3IntVector(data as IList<int>); * return; * case TypeCode.UInt32: * writer.WriteByte(AMF3TypeCode.UIntVector); * writer.WriteAMF3UIntVector(data as IList<uint>); * return; * case TypeCode.Double: * writer.WriteByte(AMF3TypeCode.NumberVector); * writer.WriteAMF3DoubleVector(data as IList<double>); * return; * case TypeCode.String: * writer.WriteByte(AMF3TypeCode.ObjectVector); * writer.WriteAMF3ObjectVector(data as IList<string>); * return; * case TypeCode.Boolean: * writer.WriteByte(AMF3TypeCode.ObjectVector); * writer.WriteAMF3ObjectVector(data as IList<bool>); * return; * default: * writer.WriteByte(AMF3TypeCode.ObjectVector); * writer.WriteAMF3ObjectVector(data as IList); * return; * } * } */ var list = data as IList; if (list != null) { //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001104.html#270405 //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001105.html#268711 if (writer.UseLegacyCollection) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array(list); } else { writer.WriteByte(AMF3TypeCode.Object); object value = new ArrayCollection(list); writer.WriteAMF3Object(value); } return; } #if !(SILVERLIGHT) var listSource = data as IListSource; if (listSource != null) { if (writer.UseLegacyCollection) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array(listSource.GetList()); } else { writer.WriteByte(AMF3TypeCode.Object); object value = new ArrayCollection(listSource.GetList()); writer.WriteAMF3Object(value); } return; } #endif var dictionary = data as IDictionary; if (dictionary != null) { //writer.WriteByte(AMF3TypeCode.Object); //writer.WriteAMF3Object(data); writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3AssociativeArray(dictionary); return; } if (data is Exception) { writer.WriteByte(AMF3TypeCode.Object); if (writer.UseLegacyThrowable) { writer.WriteAMF3Object(new ASExceptionObject(data as Exception)); } else { writer.WriteAMF3Object(data); } return; } if (data is IExternalizable) { writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); return; } if (data is IEnumerable) { var enumerator = (data as IEnumerable).GetEnumerator(); #if !(NET_1_1) var tmp = new List <object>(); #else ArrayList tmp = new ArrayList(); #endif foreach (var element in (data as IEnumerable)) { tmp.Add(element); } if (writer.UseLegacyCollection) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array(tmp); } else { writer.WriteByte(AMF3TypeCode.Object); object value = new ArrayCollection(tmp); writer.WriteAMF3Object(value); } return; } writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); }
public void WriteData(AMFWriter writer, object data) { if (data is ArrayCollection) { writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); return; } //TODO: configure somehow Vector support /* if (CollectionUtils.IsGenericListType(data.GetType())) { Type itemType = ReflectionUtils.GetListItemType(data.GetType()); switch (Type.GetTypeCode(itemType)) { case TypeCode.Int32: writer.WriteByte(AMF3TypeCode.IntVector); writer.WriteAMF3IntVector(data as IList<int>); return; case TypeCode.UInt32: writer.WriteByte(AMF3TypeCode.UIntVector); writer.WriteAMF3UIntVector(data as IList<uint>); return; case TypeCode.Double: writer.WriteByte(AMF3TypeCode.NumberVector); writer.WriteAMF3DoubleVector(data as IList<double>); return; case TypeCode.String: writer.WriteByte(AMF3TypeCode.ObjectVector); writer.WriteAMF3ObjectVector(data as IList<string>); return; case TypeCode.Boolean: writer.WriteByte(AMF3TypeCode.ObjectVector); writer.WriteAMF3ObjectVector(data as IList<bool>); return; default: writer.WriteByte(AMF3TypeCode.ObjectVector); writer.WriteAMF3ObjectVector(data as IList); return; } } */ var list = data as IList; if (list != null ) { //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001104.html#270405 //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001105.html#268711 if( writer.UseLegacyCollection ) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array(list); } else { writer.WriteByte(AMF3TypeCode.Object); object value = new ArrayCollection(list); writer.WriteAMF3Object(value); } return; } #if !(SILVERLIGHT) var listSource = data as IListSource; if (listSource != null) { if (writer.UseLegacyCollection) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array(listSource.GetList()); } else { writer.WriteByte(AMF3TypeCode.Object); object value = new ArrayCollection(listSource.GetList()); writer.WriteAMF3Object(value); } return; } #endif var dictionary = data as IDictionary; if (dictionary != null) { //writer.WriteByte(AMF3TypeCode.Object); //writer.WriteAMF3Object(data); writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3AssociativeArray(dictionary); return; } if(data is Exception) { writer.WriteByte(AMF3TypeCode.Object); if (writer.UseLegacyThrowable) writer.WriteAMF3Object(new ASExceptionObject(data as Exception) ); else writer.WriteAMF3Object(data); return; } if( data is IExternalizable ) { writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); return; } if (data is IEnumerable) { var enumerator = (data as IEnumerable).GetEnumerator(); #if !(NET_1_1) var tmp = new List<object>(); #else ArrayList tmp = new ArrayList(); #endif foreach (var element in (data as IEnumerable)) { tmp.Add(element); } if (writer.UseLegacyCollection) { writer.WriteByte(AMF3TypeCode.Array); writer.WriteAMF3Array(tmp); } else { writer.WriteByte(AMF3TypeCode.Object); object value = new ArrayCollection(tmp); writer.WriteAMF3Object(value); } return; } writer.WriteByte(AMF3TypeCode.Object); writer.WriteAMF3Object(data); }