При записи XML-фрагмента с использованием XmlWriterSettings и XmlSerializer появляется дополнительный символ

Мне нужно написать XML-фрагмент для использования веб-службой. Любые объявления xml приводят к тому, что веб-служба отклоняет запрос. Для поддержки этого у меня есть следующий класс:

public class ContentQueryCriteria
{
    public int Type { get; set; }
    public string Value { get; set; }
    public int Condition { get; set; }
}

которые позволяют мне установить критерии запроса, а затем получить результаты.

Код используется так:

ContentQueryCriteria content = new ContentQueryCriteria();
            content.Type = 1;
            content.Value = "NAVS500";
            content.Condition = 1;

            string requestBody = SerializeToString(content);
            Console.WriteLine(requestBody);

Когда я сериализую это в файл XML, я получаю правильный ответ без объявления XML или каких-либо пространств имен. Однако я бы предпочел записывать данные в поток памяти, а не в файл.

Используя следующий метод (, взятый изhttp://www.codeproject.com/Articles/58287/XML-Serialization-Tips-Tricks)Я могу добиться результатов, но по какой-то причине у меня есть ? указан как часть строки.

public static string SerializeToString(object obj)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("", "");

    MemoryStream ms = new MemoryStream();

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;
    settings.Encoding = Encoding.Unicode;
    XmlWriter writer = XmlWriter.Create(ms, settings);
    serializer.Serialize(writer, obj, ns);

    return Encoding.Unicode.GetString(ms.ToArray());

} 

результирующая строка:

?1NAVS5001

если я устанавливаю OmitXmlDeclaration = false, я получаю следующую строку:

?1NAVS5001

Может ли кто-нибудь помочь мне определить, почему дополнительный? есть и как его удалить?

Рабочий метод SerializeToString без спецификации

public static string SerializeToString(object obj)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("", "");
    MemoryStream ms = new MemoryStream();
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;
    settings.Encoding = new UnicodeEncoding(bigEndian: false, byteOrderMark: false);
    XmlWriter writer = XmlWriter.Create(ms, settings);
    serializer.Serialize(writer, obj, ns);

    return Encoding.Unicode.GetString(ms.ToArray());


}

6
задан Robert H 12 July 2012 в 17:03
поделиться