Мне нужно получить простой XML без <?xml version="1.0" encoding="utf-16"?>
в начале и xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
в первом элементе из XmlSerializer
. Как мне это сделать?
Как я могу сделать так, чтобы xmlserializer сериализовал только простой xml?
Ответы (4)
Чтобы собрать все это вместе - у меня это отлично работает:
// To Clean XML
public string SerializeToString<T>(T value)
{
var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var serializer = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, value, emptyNamespaces);
return stream.ToString();
}
}
person
Simon Sanderson
schedule
17.09.2010
using (var stream = new StringWriter ()) можно изменить на var stream = new StringWriter (); Выдает ошибку при анализе кода, поскольку пытается дважды удалить xmlwriter.
- person Archna; 04.11.2016
@Archna Если вы это сделаете, StringWriter не будет удален в случае, если вызов XmlWriter.Create вызывает исключение. Возможное решение, охватывающее вредоносных авторов XmlWriter, создающих реализацию IDispose, которая не соответствует гарантии того, что выполнение Dispose дважды ничего не делает для второго вызова, будет включать в себя попытку перехвата и установку потока на null внутри
using( writer )
, как можно увидеть в этом вопросе : stackoverflow.com/a/11192524/2144408.
- person TamaMcGlinn; 18.10.2018
Для чего вы используете параметр типа T?
- person Jesper; 11.12.2019
Используйте перегрузку метода XmlSerializer.Serialize
, где вы можете указать пользовательские пространства имен и передать туда this.
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
передача нулевого или пустого массива не поможет
person
kossib
schedule
22.11.2009
Обратите внимание, что вам нужно объединить этот ответ с ответом @tobsen, чтобы получить то, о чем я просил - действительно чистый xml!
- person Grzenio; 23.11.2009
Вы можете использовать XmlWriterSettings и установить для свойства OmitXmlDeclaration значение true как описано в msdn. Затем используйте XmlSerializer.Serialize (xmlWriter, objectToSerialize) , как описано здесь.
person
tobsen
schedule
20.11.2009
Это запишет XML в файл вместо строки. Билет на объект - это объект, который я сериализую.
Используемые пространства имен:
using System.Xml;
using System.Xml.Serialization;
Код:
XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
XmlSerializer serializer = new XmlSerializer(typeof(ticket));
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
OmitXmlDeclaration = true
};
using (XmlWriter xmlWriter = XmlWriter.Create(fullPathFileName, settings))
{
serializer.Serialize(xmlWriter, ticket, emptyNamespaces);
}
person
Keith Aymar
schedule
15.07.2019