Bari.Core.Build.Dependencies.Protocol.BinaryProtocolDeserializerContext.ReadPrimitive C# (CSharp) Method

ReadPrimitive() public method

public ReadPrimitive ( ) : object
return object
        public object ReadPrimitive()
        {
            var primitiveType = (ProtocolPrimitiveValue)ReadInt();

            switch (primitiveType)
            {
                case ProtocolPrimitiveValue.ProtocolNull:
                    return null;
                case ProtocolPrimitiveValue.ProtocolBool:
                    return ReadBool();
                case ProtocolPrimitiveValue.ProtocolInt:
                    return ReadInt();
                case ProtocolPrimitiveValue.ProtocolLong:
                    return ReadLong();
                case ProtocolPrimitiveValue.ProtocolDouble:
                    return ReadDouble();
                case ProtocolPrimitiveValue.ProtocolString:
                    return ReadString();
                case ProtocolPrimitiveValue.ProtocolUri:
                    return ReadUri();
                case ProtocolPrimitiveValue.ProtocolDateTime:
                    return ReadDateTime();
                case ProtocolPrimitiveValue.ProtocolTimeSpan:
                    return ReadTimeSpan();
                case ProtocolPrimitiveValue.ProtocolNullable:
                    return ReadPrimitive();
                case ProtocolPrimitiveValue.ProtocolEnum:
                {
                    var fullName = ReadString();
                    var value = ReadInt();
                    return Enum.ToObject(Type.GetType(fullName), value);
                }
                case ProtocolPrimitiveValue.ProtocolRegisteredEnum:
                {
                    var typeId = ReadInt();
                    var value = ReadInt();
                    return registry.CreateEnum(typeId, value);
                }
                case ProtocolPrimitiveValue.ProtocolArray:
                {
                    var elemType = ReadType();
                    var count = ReadInt();
                    if (count > 0)
                    {
                        var items = new List<object>();
                        for (int i = 0; i < count; i++)
                            items.Add(ReadPrimitive());

                        var result = Array.CreateInstance(elemType.Item2, count);
                        items.ToArray().CopyTo(result, 0);
                        return result;
                    }
                    else
                    {
                        return Array.CreateInstance(elemType.Item2, 0);
                    }
                }
                case ProtocolPrimitiveValue.ProtocolDict:
                {
                    var keyType = ReadType();
                    var valueType = ReadType();
                    var dictType = typeof (Dictionary<,>).MakeGenericType(keyType.Item2, valueType.Item2);
                    var count = ReadInt();

                    var dict = (IDictionary)Activator.CreateInstance(dictType);

                    for (int i = 0; i < count; i++)
                    {
                        var key = ReadPrimitive();
                        var value = ReadPrimitive();
                        dict.Add(key, value);
                    }

                    return dict;
                }
                default:
                    throw new InvalidOperationException("Illegal primitive type: " + primitiveType);
            }
        }