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)"); }
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); }