Класс сериализуется в XML без имени класса - PullRequest
1 голос
/ 16 августа 2011

Я пытаюсь сериализовать класс, определенный следующим образом:

        [DataContract]
    public class Human
    {

        public Human() { }


        public Human(int id, string Name, bool isEducated)
        {
            this.id = id;
            this.Name = Name;
            this.isEducated = isEducated;
        }

        [DataMember]
        public int id { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public bool isEducated { get; set; }
    }

Затем сериализуется:

            Human h = new Human(id, Name, isEducated);
        XmlRootAttribute root = new XmlRootAttribute();
        root.ElementName = "Repository"; 
        XmlSerializer xs = new XmlSerializer(typeof(Human), root);

        FileStream fs = new FileStream(fname, FileMode.Open);
        xs.Serialize(fs, h);

И вот результат:

 <Repository xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <id>1</id>
  <Name>Vill</Name>
  <isEducated>false</isEducated>
</Repository>

Не то, что я ожидал. Имя класса просто опущено. В чем здесь проблема?

1 Ответ

3 голосов
/ 16 августа 2011

Вы явно называете корневой элемент «Репозиторий», поэтому он отображается таким образом. Попробуйте опустить это утверждение:)

Я думаю, что вы хотите, чтобы Human имел этот элемент Repository. Для этого вам нужно будет сделать еще один корневой элемент под репозиторием, а затем сериализовать ваш объект в него. Следует отметить, что XmlSerializer обычно используется для записи объектов в XML-файлы, а не для создания целых XML-файлов. У меня есть пример того, что может сработать для вас ниже:

System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(FilePath, null);
writer.WriteStartDocument();
writer.Formatting = Formatting.Indented;
writer.WriteStartElement("Repository");

Human h = new Human(id, Name, isEducated);
XmlRootAttribute root = new XmlRootAttribute();
root.ElementName = "Human"; 
XmlSerializer xs = new XmlSerializer(typeof(Human), root);
xs.Serialize(writer, h);

writer.WriteEndElement();
writer.Close();

Что-то в этом роде ... Я очень сонный: /

...