public void Write(object value, ProtoWriter dest) { ProtoWriter.ExpectRoot(dest); if (_protoCompatibility) { _serializer.Write(value, dest); return; } int typeKey; object obj; int refKey; var rootToken = ProtoWriter.StartSubItem(null, false, dest); ProtoWriter.WriteFieldHeaderBegin(CurrentFormatVersion, dest); _serializer.Write(value, dest); while (ProtoWriter.TryGetNextLateReference(out typeKey, out obj, out refKey, dest)) { ProtoWriter.WriteFieldHeaderBegin(refKey + 1, dest); ProtoWriter.WriteRecursionSafeObject(obj, typeKey, dest); } ProtoWriter.EndSubItem(rootToken, dest); }