Я хочу получить XML с заголовком

#c# #.net #xml-serialization

#c# #.net #xml-сериализация

Вопрос:

При сериализации объекта XmlSerializer с использованием приведенного ниже кода я получаю

 <?xml version="1.0" encoding="UTF-8"?> 
  

Код:

 private static bool StudentsReport(string filePath, Students std)
{
       XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });

        XmlSerializer serializer = new XmlSerializer(typeof(Students));

        XmlWriterSettings settings = new XmlWriterSettings
        {
            Indent = true,
            OmitXmlDeclaration = true,
        };

        using (XmlWriter writer = XmlWriter.Create(filePath, settings))
        {
            serializer.Serialize(writer , std, namespaces );
        }

        return true;
 }
  

Класс Student — это :

 public class Students
{
        private string studentID;
        private string studentName;

        /// <summary>
        /// To store Machine Details.
        /// </summary>
        public string ID
        {
            get { return this.studentID; }
            set { this.studentID = value; }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Name
        {
            get { return this.studentName; }
            set { this.studentName = value; }
        }
}
  

Комментарии:

1. Приведенный выше код генерирует XML без автономного

Ответ №1:

Добавьте standalone значение, используя WriteStartDocument метод.

 XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    //OmitXmlDeclaration = true, // must be false
};

using (XmlWriter writer = XmlWriter.Create(filePath, settings))
{
    writer.WriteStartDocument(standalone: true);
    serializer.Serialize(writer, std, namespaces);
}
  

Несколько советов.

Переименуйте Students класс в Student . Потому что он описывает одного ученика, а не коллекцию.

ID свойство переименовать в Id . Смотрите Рекомендации по именованию

Измените сигнатуру метода: void StudentReport . Не имеет смысла всегда возвращать одно и то же значение bool .