Вопрос по c#, xmlserializer – Сериализация объектов в XML в C #

2

У меня есть простой ученик класса в пространстве имен школы.

namespace XmlTestApp
{
    public class Student
    {
        private string studentId;

        public string FirstName;
        public string MI;
        public string LastName;

        public Student()
        {
            //Just provided for making Serialization work as obj.GetType() needs parameterless constructor.
        }

        public Student(String studentId)
        {
            this.studentId = studentId;
        }

    }
}

Теперь, когда я сериализирую это, я получаю это как сериализованный XML:

<?xml version="1.0" encoding="utf-8"?>
<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FirstName>Cad</FirstName>
  <MI>Dsart</MI>
  <LastName>dss</LastName>
</Student>

Но то, что я хочу, это, в основном мне нужно пространство имен с префиксом имени класса в XML, это возможно?

<?xml version="1.0" encoding="utf-8"?>
<XmlTestApp:Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FirstName>Cad</FirstName>
  <MI>Dsart</MI>
  <LastName>dss</LastName>
</Student>

Вот мой код сериализации:

Student s = new Student("2");
            s.FirstName = "Cad";
            s.LastName = "dss";
            s.MI = "Dsart";

            System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(s.GetType());

            TextWriter txtW=new StreamWriter(Server.MapPath("~/XMLFile1.xml"));
            x.Serialize(txtW,s);

Ваш Ответ

3   ответа
0

чтобы объявить свое пространство имен, а затем передать его в XmlSerializer.

УвидетьПрефикс XML-сериализации и пространства имен

2

EDIT: Короткий ответ все еще да. Правильный атрибут на самом деле является атрибутом XmlType. Кроме того, вам нужно будет указать пространство имен, а затем в коде сериализации вам нужно будет указать псевдонимы для пространств имен, которые будут использоваться для определения элементов.

{
    [XmlRoot(Namespace="xmltestapp", TypeName="Student")]
    public class Student
    {
        private string studentId;

        public string FirstName;
        public string MI;
        public string LastName;

        public Student()
        {
            //Just provided for making Serialization work as obj.GetType() needs parameterless constructor.
        }

        public Student(String studentId)
        {
            this.studentId = studentId;
        }

    }
}

...

        Student s = new Student("2");
        s.FirstName = "Cad";
        s.LastName = "dss";
        s.MI = "Dsart";

        System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(s.GetType());

        System.Xml.Serialization.XmlSerializationNamespaces ns = new System.Xml.Serialization.XmlSerializationNamespaces();

        ns.Add("XmlTestApp", "xmltestapp");

        TextWriter txtW=new StreamWriter(Server.MapPath("~/XMLFile1.xml"));
        x.Serialize(txtW,s, ns); //add the namespace provider to the Serialize method

Возможно, вам придется поэкспериментировать с настройкой пространства имен, чтобы убедиться, что он по-прежнему использует XSD / XSI из W3.org, но это должно привести вас на правильный путь.

Не работает, я разместил вывод в комментарии выше. Charu
Хм. Двоеточие экранируется в его шестнадцатеричное значение. Двоеточие допустимо для элементов XML (Производство 4 и 5), но обычно оно используется для отделения ярлыка пространства имен от фактического типа. Редактировать, чтобы следовать.
Я получаю это & lt; XmlTestApp_x003A_Student xmlns: xsi = & quot;w3.org/2001/XMLSchema-instance& Quot; XMLNS: XSD = & Quot;w3.org/2001/XMLSchema& Quot; & GT; & Lt; FirstName & GT; Cad & л; / FirstName & GT; & Л; MI & GT; Dsart & л; / & МИ GT; & Lt; ЬазШате & GT; & ДСС л; / ЬазШате & GT; & Lt; / XmlTestApp_x003A_Student & GT; Charu
0

а не использовать инструмент в Visual Studio, от xml до xsd. Если у вас есть xsd, вы можете генерировать сериализуемые классы с xsdToCode

Похожие вопросы