private static void WriteValue(BinaryWriter writer, IValue value) { // Write the value type writer.Write((uint)value.Type); switch (value.Type) { case ValueType.Table: WriteValue(writer, value.AsTable()); break; case ValueType.List: WriteValue(writer, value.AsList()); break; case ValueType.String: WriteValue(writer, value.AsString()); break; case ValueType.Integer: writer.Write(value.AsInteger()); break; case ValueType.Float: writer.Write(value.AsFloat()); break; case ValueType.Boolean: WriteValue(writer, value.AsBoolean()); break; default: throw new InvalidOperationException("Unknown ValueType"); } }