Мне нужно написать 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());
}
результирующая строка:
?1 NAVS500 1
если я устанавливаю OmitXmlDeclaration = false, я получаю следующую строку:
?1 NAVS500 1
Может ли кто-нибудь помочь мне определить, почему дополнительный? есть и как его удалить?
Рабочий метод 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());
}