Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Serijalizacija klase u custom XML format

[es] :: .NET :: Serijalizacija klase u custom XML format

[ Pregleda: 1416 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Serijalizacija klase u custom XML format13.11.2012. u 17:49 - pre 139 meseci
Potrebno mi je da sledecu klasu:

Code (csharp):

    [Serializable]
    [XmlRoot("Fields")]
    public class Product
    {
        [XmlElement(ElementName = "XPQ-21")]
        public string FirstName { get; set; }

        [XmlElement(ElementName = "SDT-22")]
        public string LastName { get; set; }

    }
 


serijalizujem u sledeci oblik:

Code (xml):

<fields>
     <f>
          <n>XPQ-21</n>
          <v>Igor</v>
     </f>
     <f>
          <n>SDT-22</n>
          <v>Gajic</v>
     </f>
</fields>
 



Da li je moguce ovo uraditi samo koristeci dekoraciju atributima ili moram da zasucem rukave i uradim custom serijalizaciju, preko IXmlSerializable interfejsa ?

U real-world ova klasa ima 40+ propertija, pa bi mi out-of-the-box resenje jako pomoglo.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Serijalizacija klase u custom XML format13.11.2012. u 18:34 - pre 139 meseci
Imas dve opcije koliko ja vidim:

- Uvek mozes kroz ISerializable da kontrolises izlaz pa i da transformises listu propoertija u listu podobjekata. jednostavnije ali moras rucno da procesiras svaki property

- napravis xslt i transformises xml ove klase u format koji ti treba. Moze da se napravi da dinamicki stransformise sve podnodove ali imas once-off komplikaiju da napravis transformaciju
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Serijalizacija klase u custom XML format13.11.2012. u 18:38 - pre 139 meseci
Zasad imam sledece parce koda:

Code (csharp):

        #region IXmlSerializable Members

        public XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(XmlReader reader)
        {
           
        }

        public void WriteXml(XmlWriter writer)
        {
            foreach (var property in typeof(Product).GetProperties())
            {
                writer.WriteStartElement("F");

                var elementName = property.Name;
                var customElementAttributes = property.GetCustomAttributes(typeof(XmlElementAttribute), false);
                if (customElementAttributes.Length > 0)
                {
                    elementName =  ((XmlElementAttribute)customElementAttributes[0]).ElementName;
                }

                writer.WriteElementString("N", elementName);
                writer.WriteElementString("V", property.GetValue(this, null).ToString());

                writer.WriteEndElement();
            }            
        }

        #endregion
 


To mi zavrsava posao, ali probacu da uradim preko ISerializable interfejsa.

XSLT transformacija ne bi bila preterano komplikovana, ali mislim da bi u ovom slucaju bila overkill za ono sto mi treba (serijalizacija u XML string i prosledjivanje web metodi)
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Serijalizacija klase u custom XML format13.11.2012. u 20:15 - pre 139 meseci
Na kraju sam implementirao kao posebnu f-ju, bez implementiranja interfejsa...

Code (csharp):

        public string WriteXml()
        {
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings()
            {
                ConformanceLevel = ConformanceLevel.Auto,
                Encoding = Encoding.UTF8,
                Indent = true,
                CloseOutput = true,
                CheckCharacters = true
            };

            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
                writer.WriteStartElement("FIELDS");
                foreach (var property in typeof(Product).GetProperties())
                {
                    writer.WriteStartElement("F");

                    var elementName = property.Name;
                    var customElementAttributes = property.GetCustomAttributes(typeof(XmlElementAttribute), false);
                    if (customElementAttributes.Length > 0)
                    {
                        elementName = ((XmlElementAttribute)customElementAttributes[0]).ElementName;
                    }

                    writer.WriteElementString("N", elementName);
                    writer.WriteElementString("V", property.GetValue(this, null).ToString());

                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }

            return sb.ToString();
        }
    }
 
 
Odgovor na temu

[es] :: .NET :: Serijalizacija klase u custom XML format

[ Pregleda: 1416 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.