Some opinionated comments. And hopefully part of an answer.
I would use a drop-down list and not pre-fill it with anything. Don't accept an empty box, but provide a list choice which is "Prefer not to say" but phrased better. :)
Not pre-filling it makes the user at least think about it, so that you don't get the default answer all the time. Be sure to keep the list short, so that it isn't too much of an effort to answer this.
Most people don't worry about answering registration questions accurately. So unless ethnicity has some major effect on how your app operates, if the question takes too much effort you're likely to get a random click on the first few displayed choices.