/// <summary> /// Reads a Descriptor and DescribedType object from the buffer. /// </summary> /// <param name="buffer"></param> public static object DecodeDescribedType(ByteBuffer buffer, byte formatCode) { if (formatCode != FormatCode.Described) { throw new ArgumentException(nameof(formatCode), "Format code must be described (0x00)"); } var descriptor = DecodeDescriptor(buffer); if (DescribedTypeCodec.IsKnownDescribedType(descriptor)) { return(DecodeKnownDescribedType(buffer, descriptor)); } object value = DecodeBoxedObject(buffer); // TODO: performance. boxing return(DescribedTypeCodec.GetDescribedTypeConstructor(value.GetType())(descriptor, value)); }