Прежде всего, если бы потребитель вашей строки обрабатывал XML, он бы не заботился о префиксе, поскольку он не имеет значения (для XML). Возможно, они не понимают XML и думают, что обрабатывают строку (для этого может потребоваться строка «ps:» в каждом элементе).
Во-вторых, вы должны немного изменить свой код:
XmlSerializer xs = new XmlSerializer(pObject.GetType());
using (MemoryStream memoryStream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings()
{
Encoding = Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
{
xs.Serialize(writer, pObject);
}
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
Это правильно избавится от потока и XmlWriter, если возникнет исключение, прекратит использование устаревшего класса XmlTextWriter и все же вернет строку, содержащую XML, написанный для UTF-8.
Наконец, для управления префиксом см. «Как: квалифицировать имена элементов XML и атрибутов XML» :
XmlSerializerNamespaces myNamespaces = new XmlSerializerNamespaces();
myNamespaces.Add("ps", "www.ladieda.com");
XmlSerializer xs = new XmlSerializer(pObject.GetType());
using (MemoryStream memoryStream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings()
{
Encoding = Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
{
xs.Serialize(writer, pObject, myNamespaces);
}
return Encoding.UTF8.GetString(memoryStream.ToArray());
}