示例#1
0
        private IASValue ReadMixedArray()
        {
            int length = input.ReadInt();

            if (length < 0)
            {
                throw new AMFException(ExceptionPrefix + "Encountered negative MixedArray length.");
            }

            // Important: Add the array to the cache before deserializing its properties!
            ASArray result = ASArray.CreateUninitializedInstance();

            AddObjectToCache(result);

            IASValue[] indexedValues = length == 0 ? EmptyArray <IASValue> .Instance : new IASValue[length];
            IDictionary <string, IASValue> mixedValues = null;

            for (;;)
            {
                string key = input.ReadShortString();
                if (key.Length == 0)
                {
                    break;
                }

                IASValue value = input.ReadObject();

                // If the string looks like a valid index, then stuff it into the array.
                int index;
                if (int.TryParse(key, NumberStyles.None, CultureInfo.InvariantCulture, out index) && index >= 0 && index < length)
                {
                    indexedValues[index] = value;
                }
                else
                {
                    // Otherwise add it as a mixed value.
                    if (mixedValues == null)
                    {
                        mixedValues = new Dictionary <string, IASValue>();
                    }

                    mixedValues.Add(key, value);
                }
            }

            if (mixedValues == null)
            {
                mixedValues = EmptyDictionary <string, IASValue> .Instance;
            }

            ConsumeEndOfObject();

            result.SetProperties(indexedValues, mixedValues);
            return(result);
        }
示例#2
0
 /// <summary>
 /// Reads AMF content from an input stream.
 /// </summary>
 /// <param name="input">The input stream</param>
 /// <param name="contentLength">The length of the content to read in bytes</param>
 /// <returns>The content object</returns>
 private static IASValue ReadAMFContent(AMFDataInput input, int contentLength)
 {
     input.BeginObjectStream();
     try
     {
         // TODO: validate for content length
         return(input.ReadObject());
     }
     finally
     {
         input.EndObjectStream();
     }
 }
示例#3
0
 /// <summary>
 /// Reads AMF content from an input stream.
 /// </summary>
 /// <param name="input">The input stream</param>
 /// <param name="contentLength">The length of the content to read in bytes</param>
 /// <returns>The content object</returns>
 private static IASValue ReadAMFContent(AMFDataInput input, int contentLength)
 {
     input.BeginObjectStream();
     try
     {
         // TODO: validate for content length
         return input.ReadObject();
     }
     finally
     {
         input.EndObjectStream();
     }
 }
        private object FromAMF(byte[] bytes)
        {
            IActionScriptSerializer serializer = serializerFactory.CreateSerializer();
            MemoryStream stream = new MemoryStream(bytes);
            AMFDataInput dataInput = new AMFDataInput(stream, serializer);
            dataInput.BeginObjectStream();
            IASValue asValue = dataInput.ReadObject();
            dataInput.EndObjectStream();
            object nativeValue = serializer.ToNative(asValue, null);

            return nativeValue;
        }