Как я могу пропустить объявление xml при сериализации?

Я пытаюсь вывести xml файл без xml-заголовка Я пробовал:

Type t = obj.GetType();
XmlSerializer xs=new XmlSerializer(t);
XmlWriter xw = XmlWriter.Create(@"company.xml",
                                        new XmlWriterSettings() { OmitXmlDeclaration = true, Indent = true });
xs.Serialize(xw,obj);
xw.Close();

Но он все еще выводится в файле xml. Мне не нужны струнные трюки. Любые идеи?

Ответы

Ответ 1

Установите ConformanceLevel на Fragment, например:

Type t = obj.GetType();
XmlSerializer xs=new XmlSerializer(t);
XmlWriter xw = XmlWriter.Create(@"company.xml",
                              new XmlWriterSettings() { 
                                   OmitXmlDeclaration = true
                                   , ConformanceLevel = ConformanceLevel.Auto
                                   , Indent = true });
xs.Serialize(xw,obj);
xw.Close();

Ответ 2

Посмотрите документация. Там вы видите

Объявление XML всегда записывается, если для ConformanceLevel установлено значение Документ, даже если для параметра OmitXmlDeclaration установлено значение true.

Объявление XML никогда не записывается, если ConformanceLevel установлен на Фрагмент. Вы можете вызвать WriteProcessingInstruction, чтобы явно писать из объявления XML.

Итак, вам нужно добавить

ConformanceLevel = ConformanceLevel.Fragment;

Ответ 3

Если вы используете перегрузку Serialize (Stream, Object, XmlSerializerNamespaces) и предоставляете null как пространство XmlSerializerNamespaces, XmlSerializer не будет пытаться сбой WriteStartDocument. Попробуйте:

xs.Serialize(xw, obj, null);