ReadRawString() public method

public ReadRawString ( ) : string
return string
コード例 #1
0
 internal static string Unpack_String(MsgPackReader reader)
 {
     if (!reader.Read() || !reader.IsRaw())
     {
         UnpackFailed();
     }
     return(reader.ReadRawString());
 }
コード例 #2
0
        public object Unpack(MsgPackReader reader)
        {
            //IL_0260: Unknown result type (might be due to invalid IL or missing references)
            //IL_029b: Unknown result type (might be due to invalid IL or missing references)
            //IL_02cb: Unknown result type (might be due to invalid IL or missing references)
            if (reader.Read())
            {
                switch (reader.Type)
                {
                case TypePrefixes.PositiveFixNum:
                case TypePrefixes.Int32:
                case TypePrefixes.NegativeFixNum:
                    return(reader.ValueSigned);

                case TypePrefixes.Int8:
                    return((sbyte)reader.ValueSigned);

                case TypePrefixes.Int16:
                    return((short)reader.ValueSigned);

                case TypePrefixes.Int64:
                    return(reader.ValueSigned64);

                case TypePrefixes.UInt8:
                    return((byte)reader.ValueUnsigned);

                case TypePrefixes.UInt16:
                    return((ushort)reader.ValueUnsigned);

                case TypePrefixes.UInt32:
                    return(reader.ValueUnsigned);

                case TypePrefixes.UInt64:
                    return(reader.ValueUnsigned64);

                case TypePrefixes.True:
                    return(true);

                case TypePrefixes.False:
                    return(false);

                case TypePrefixes.Float:
                    return(reader.ValueFloat);

                case TypePrefixes.Double:
                    return(reader.ValueDouble);

                case TypePrefixes.Nil:
                    return(null);

                case TypePrefixes.FixRaw:
                case TypePrefixes.Raw8:
                case TypePrefixes.Raw16:
                case TypePrefixes.Raw32:
                    return(reader.ReadRawString());

                case TypePrefixes.Bin8:
                case TypePrefixes.Bin16:
                case TypePrefixes.Bin32:
                {
                    byte[] array3 = new byte[reader.Length];
                    reader.ReadValueRaw(array3, 0, array3.Length);
                    return(array3);
                }

                case TypePrefixes.FixArray:
                case TypePrefixes.Array16:
                case TypePrefixes.Array32:
                {
                    object[] array2 = new object[reader.Length];
                    for (int j = 0; j < array2.Length; j++)
                    {
                        array2[j] = Unpack(reader);
                    }
                    return(array2);
                }

                case TypePrefixes.FixMap:
                case TypePrefixes.Map16:
                case TypePrefixes.Map32:
                {
                    IDictionary <object, object> dictionary = new Dictionary <object, object>((int)reader.Length);
                    int length = (int)reader.Length;
                    for (int i = 0; i < length; i++)
                    {
                        object key   = Unpack(reader);
                        object value = Unpack(reader);
                        dictionary.Add(key, value);
                    }
                    return(dictionary);
                }

                case TypePrefixes.Ext8:
                case TypePrefixes.Ext16:
                case TypePrefixes.Ext32:
                {
                    sbyte b = reader.ReadExtType();
                    switch (b)
                    {
                    case 81:
                        if (reader.Length == 16)
                        {
                            float num3 = reader.ReadSingle();
                            float num4 = reader.ReadSingle();
                            float num5 = reader.ReadSingle();
                            float num6 = reader.ReadSingle();
                            return(new Quaternion(num3, num4, num5, num6));
                        }
                        break;

                    case 86:
                        if (reader.Length == 12)
                        {
                            float num7 = reader.ReadSingle();
                            float num8 = reader.ReadSingle();
                            float num9 = reader.ReadSingle();
                            return(new Vector3(num7, num8, num9));
                        }
                        break;

                    case 87:
                        if (reader.Length == 8)
                        {
                            float num  = reader.ReadSingle();
                            float num2 = reader.ReadSingle();
                            return(new Vector2(num, num2));
                        }
                        break;
                    }
                    byte[] array = new byte[reader.Length];
                    reader.ReadValueRaw(array, 0, (int)reader.Length);
                    return(new Ext(b, array));
                }

                default:
                    throw new FormatException();
                }
            }
            throw new FormatException();
        }
コード例 #3
0
 static object StringUnpacker(ObjectPacker packer, MsgPackReader reader)
 {
     return((object)reader.ReadRawString());
 }
コード例 #4
0
 static object DateTimeOffsetUnpacker(ObjectPacker packer, MsgPackReader reader)
 {
     return(DateTimeOffset.Parse(reader.ReadRawString()));
 }
コード例 #5
0
        object Unpack(MsgPackReader reader, string name, Type type)
        {
            if (!reader.Read())
            {
                throw GenerateFormatException(type, name);
            }

            if (reader.Type == TypePrefixes.Nil)
            {
                return(null);
            }

            if (type.IsPrimitive)
            {
                return(ValueAsPrimitive(reader, type));
            }

            if (type.IsEnum)
            {
                return(ValueAsPrimitive(reader, typeof(int)));
            }

            Type nullableType = Nullable.GetUnderlyingType(type);

            if (nullableType != null && nullableType.IsPrimitive)
            {
                return(ValueAsPrimitive(reader, nullableType));
            }

            if (type.IsArray)
            {
                if ((!reader.IsArray()))
                {
                    throw GenerateFormatException(type, name);
                }

                Type  elementType = type.GetElementType();
                Array array       = Array.CreateInstance(elementType, (int)reader.Length);
                for (int i = 0; i < array.Length; i++)
                {
                    array.SetValue(Unpack(reader, name, elementType), i);
                }
                return(array);
            }

            if (type.IsInterface)
            {
                if (reader.Type != TypePrefixes.FixArray && reader.Length != 2)
                {
                    throw GenerateFormatException(type, name);
                }
                if (!reader.Read() || !reader.IsRaw())
                {
                    throw GenerateFormatException(type, name);
                }
                var nextType = Type.GetType(reader.ReadRawString());
                return(Unpack(reader, name, nextType));
            }

            if (reader.IsMap())
            {
                object obj = FormatterServices.GetUninitializedObject(type);
                ReflectionCacheEntry entry = ReflectionCache.Lookup(type);
                int members = (int)reader.Length;
                for (int i = 0; i < members; i++)
                {
                    if (!reader.Read() || !reader.IsRaw())
                    {
                        throw GenerateFormatException(type, name);
                    }
                    FieldInfo fieldInfo;
                    string    nextFieldName = reader.ReadRawString();
                    if (!entry.FieldMap.TryGetValue(nextFieldName, out fieldInfo))
                    {
                        reader.Skip();                         // skip to next if field name is missing.
                        continue;
                    }
                    fieldInfo.SetValue(obj, Unpack(reader, nextFieldName, fieldInfo.FieldType));
                }
                return(obj);
            }

            UnpackDelegate unpacker;

            if (UnpackerMapping.TryGetValue(type, out unpacker))
            {
                return(unpacker(this, reader));
            }

            throw GenerateFormatException(type, name);
        }