First thing is to define a schema that can represent your data. So far, you handling your messages very generically, by sticking all of it in a Dictionary. But both FlatBuffers and C# are statically typed systems, so your code would be a whole lot more readable and efficient if you used something more specific.
For example, a schema could look something like:
table CastSpell { spell_id:short; target_guid:ulong }
union Action { CastSpell, SomeOtherActionEtc.. }
enum Operation { .. }
table Message { operation_code:Operation; action:Action; }
Here the union takes the place of your dictionary. It may well be that Operation is redundant, but I can't tell from your code.
Have a look at the C# tutorial in the FlatBuffer docs to see how you typically read and write such data structures.