Esempio n. 1
0
        internal static void WriteObject(object value, int key, ProtoWriter writer, PrefixStyle style, int fieldNumber)
        {
#if FEAT_IKVM
            throw new NotSupportedException();
#else
            if (writer.model == null)
            {
                throw new InvalidOperationException("Cannot serialize sub-objects unless a model is provided");
            }
            if (writer.wireType != WireType.None)
            {
                throw ProtoWriter.CreateException(writer);
            }

            switch (style)
            {
            case PrefixStyle.Base128:
                writer.wireType    = WireType.String;
                writer.fieldNumber = fieldNumber;
                if (fieldNumber > 0)
                {
                    WriteHeaderCore(fieldNumber, WireType.String, writer);
                }
                break;

            case PrefixStyle.Fixed32:
            case PrefixStyle.Fixed32BigEndian:
                writer.fieldNumber = 0;
                writer.wireType    = WireType.Fixed32;
                break;

            default:
                throw new ArgumentOutOfRangeException("style");
            }
            SubItemToken token = StartSubItem(value, writer, true);
            if (key < 0)
            {
                if (!writer.model.TrySerializeAuxiliaryType(writer, value.GetType(), DataFormat.Default, Serializer.ListItemTag, value, false))
                {
                    TypeModel.ThrowUnexpectedType(value.GetType());
                }
            }
            else
            {
                writer.model.Serialize(key, value, writer);
            }
            EndSubItem(token, writer, style);
#endif
        }