2012-06-18 6 views
2

У меня есть простой класс Student в пространстве имен School.Сериализация объектов в xml в C#

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); 
+1

Http: // StackOverflow. com/questions/1254544/how-do-i-define-xml-serialization-attributes-to-support-namespace-prefixes-duri – NickD

ответ

2

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

namespace XmlTestApp 
{ 
    [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, но это должно получить Вас на правильном пути.

+0

Я получаю это Cad Dsart ДСС Charu

+0

Не работает, я отправил вывод в указанном выше комментарии. – Charu

+0

Хм. Двоеточие сбрасывается в его шестнадцатеричное значение. Двойник действителен для элементов XML (Production 4 и 5), но обычно используется для разделения ярлыка пространства имен от фактического типа. Редактирование. – KeithS

0

Другой способ, как достичь этого, - написать свой xml - чем использовать инструмент в visual studio - xml to xsd. Если у вас есть XSD, вы можете создать serializeable классы с xsdToCode

Смежные вопросы