Como resolver o erro "não é possível alternar a codificação" ao inserir XML no SQL Server

Estou tentando inserir na coluna XML (SQL SERVER 2008 R2), mas o servidor está reclamando:

System.Data.SqlClient.SqlException (0x80131904):
Análise XML: linha 1, caractere 39, incapaz de alternar a codificação

Descobri que a coluna XML precisa ser UTF-16 para que a inserção seja bem-sucedida.

O código que estou usando é:

 XmlSerializer serializer = new XmlSerializer(typeof(MyMessage));
 StringWriter str = new StringWriter();
 serializer.Serialize(str, message);
 string messageToLog = str.ToString();

Como posso serializar o objeto para estar na string UTF-8?

EDITAR: Ok, desculpe pela confusão - a string precisa estar em UTF-8. Você estava certo - é UTF-16 por padrão, e se eu tentar inserir no UTF-8, ele passa. Portanto, a questão é como serializar no UTF-8.

Exemplo

Isso causa erros ao tentar inserir no SQL Server:

    <?xml version="1.0" encoding="utf-16"?>
    <MyMessage>Teno</MyMessage>

Isto não:

    <?xml version="1.0" encoding="utf-8"?>
    <MyMessage>Teno</MyMessage>

Atualizar

Eu descobri quando o SQL Server 2008 por suaXml tipo de coluna precisa de utf-8 e, quando utf-16 emencoding propriedade da especificação xml que você está tentando inserir:

Quando você deseja adicionarutf-8, adicione parâmetros ao comando SQL como este:

 sqlcmd.Parameters.Add("ParamName", SqlDbType.VarChar).Value = xmlValueToAdd;

Se você tentar adicionar o xmlValueToAdd comencoding=utf-16 na linha anterior, produziria erros na inserção. Também oVarChar significa que os caracteres nacionais não são reconhecidos (eles se tornam pontos de interrogação).

Para adicionar utf-16 ao db, useSqlDbType.NVarChar ouSqlDbType.Xml no exemplo anterior, ou simplesmente não especifique o tipo:

 sqlcmd.Parameters.Add(new SqlParameter("ParamName", xmlValueToAdd));

questionAnswers(8)

yourAnswerToTheQuestion