/// <summary>
        /// Writes a message or group as a field
        /// </summary>
        protected override void WriteMessageOrGroup(string field, IMessageLite message)
        {
            DictionaryWriter writer = Create();

            writer.WriteMessage(message);

            _output[field] = writer.ToDictionary();
        }
        /// <summary>
        /// Writes an array of field values
        /// </summary>
        protected override void WriteArray(FieldType fieldType, string field, IEnumerable items)
        {
            List <object> objects = new List <object>();

            foreach (object o in items)
            {
                switch (fieldType)
                {
                case FieldType.Group:
                case FieldType.Message:
                {
                    DictionaryWriter writer = Create();
                    writer.WriteMessage((IMessageLite)o);
                    objects.Add(writer.ToDictionary());
                }
                break;

                case FieldType.Bytes:
                    objects.Add(((ByteString)o).ToByteArray());
                    break;

                case FieldType.Enum:
                    if (o is IEnumLite)
                    {
                        objects.Add(((IEnumLite)o).Number);
                    }
                    else
                    {
                        objects.Add((int)o);
                    }
                    break;

                default:
                    objects.Add(o);
                    break;
                }
            }

            _output[field] = objects.ToArray();
        }