EDIT: Você diz "Estou concatenando um arquivo XML simples e curto e não uso a serialização, então preciso escapar explicitamente do caractere XML manualmente".
Eu recomendo fortemente que você não faça isso manualmente. Use as APIs XML para fazer tudo por você - leia os arquivos originais, mescle os dois em um único documento da maneira que for necessário (provavelmente você deseja usar XmlDocument.ImportNode) e, em seguida, escreva novamente. Você não quer escrever seus próprios analisadores / formatadores XML. A serialização é um tanto irrelevante aqui.
Se você puder nos dar um exemplo breve, mas completo, de exatamente o que está tentando fazer, provavelmente podemos ajudá-lo a evitar a preocupação de escapar em primeiro lugar.
Resposta original
Não está totalmente claro o que você quer dizer, mas normalmente APIs XML fazem isso para você. Você define o texto em um nó e ele automaticamente escapará de tudo o que for necessário. Por exemplo:
Exemplo de LINQ to XML:
using System;
using System.Xml.Linq;
class Test
{
static void Main()
{
XElement element = new XElement("tag",
"Brackets & stuff <>");
Console.WriteLine(element);
}
}
Exemplo DOM:
using System;
using System.Xml;
class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
XmlElement element = doc.CreateElement("tag");
element.InnerText = "Brackets & stuff <>";
Console.WriteLine(element.OuterXml);
}
}
Resultado de ambos os exemplos:
<tag>Brackets & stuff <></tag>
Isso presumindo que você deseja escape de XML, é claro. Se não estiver, poste mais detalhes.