public SerializationEntrySurrogate ReadValue(ref Reader reader, SerializerSession session, Field field)
        {
            ReferenceCodec.MarkValueField(session);
            var  result  = new SerializationEntrySurrogate();
            uint fieldId = 0;

            while (true)
            {
                var header = reader.ReadFieldHeader(session);
                if (header.IsEndBaseOrEndObject)
                {
                    break;
                }
                fieldId += header.FieldIdDelta;
                switch (fieldId)
                {
                case 0:
                    result.Name = StringCodec.ReadValue(ref reader, session, header);
                    break;

                case 1:
                    result.Value = ObjectCodec.ReadValue(ref reader, session, header);
                    break;
                }
            }

            return(result);
        }
 public void Serialize <TBufferWriter>(ref Writer <TBufferWriter> writer, ObjectWithoutNewField obj) where TBufferWriter : IBufferWriter <byte>
 {
     StringCodec.WriteField(ref writer, 0, typeof(string), obj.Blah);
     Int32Codec.WriteField(ref writer, 1, typeof(int), obj.Version);
     // serializing a new field to simulate a binary that's created from a newer version of the object
     ObjectCodec.WriteField(ref writer, 6, typeof(object), "I will be stuck in binary limbo! (I shouldn't be part of the deserialized object)");
 }
Esempio n. 3
0
 public void WriteField <TBufferWriter>(ref Writer <TBufferWriter> writer,
                                        uint fieldIdDelta,
                                        Type expectedType,
                                        SerializationEntrySurrogate value) where TBufferWriter : IBufferWriter <byte>
 {
     ReferenceCodec.MarkValueField(writer.Session);
     writer.WriteFieldHeader(fieldIdDelta, expectedType, SerializationEntryType, WireType.TagDelimited);
     StringCodec.WriteField(ref writer, 0, typeof(string), value.Name);
     ObjectCodec.WriteField(ref writer, 1, typeof(object), value.Value);
     writer.WriteEndObject();
 }
        public void WriteField(
            ref Writer writer,
            SerializerSession session,
            uint fieldIdDelta,
            Type expectedType,
            SerializationEntrySurrogate value)
        {
            ReferenceCodec.MarkValueField(session);
            writer.WriteFieldHeader(session, fieldIdDelta, expectedType, SerializationEntryType, WireType.TagDelimited);
            StringCodec.WriteField(ref writer, session, 0, typeof(string), value.Name);
            ObjectCodec.WriteField(ref writer, session, 1, typeof(object), value.Value);

            writer.WriteEndObject();
        }
        public SerializationEntrySurrogate ReadValue <TInput>(ref Reader <TInput> reader, Field field)
        {
            ReferenceCodec.MarkValueField(reader.Session);
            var  result  = new SerializationEntrySurrogate();
            uint fieldId = 0;

            while (true)
            {
                var header = reader.ReadFieldHeader();
                if (header.IsEndBaseOrEndObject)
                {
                    break;
                }

                fieldId += header.FieldIdDelta;
                switch (fieldId)
                {
                case 0:
                    result.Name = StringCodec.ReadValue(ref reader, header);
                    break;

                case 1:
                    result.Value = ObjectCodec.ReadValue(ref reader, header);
                    break;

                case 2:
                    result.ObjectType = TypeSerializerCodec.ReadValue(ref reader, header);
                    break;

                default:
                    reader.ConsumeUnknownField(header);
                    break;
                }
            }

            return(result);
        }