[.NET] Serialization conversie

Pagina: 1
Acties:

  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Binnen mijn applicatie heb ik een aantal entiteiten: Company, Person e.d.
De informatie van deze klassen wil ik geserializeerd hebben naar XML, zodat ik deze naar een service kan sturen die deze informatie toevoegd/aanpast in bijv. een database (deze service accepteert alleen XML).

Nu heb ik het volgende probleem: de Service wil bijvoorbeeld in het geval van booleans J en N binnenkrijgen ipv True en False. Daarnaast kan ik de Service ook voor informatie opvragen gebruiken en dan krijg ik bij booleans J en N terug. Hoe voer ik ten tijde van het serializeren/deserializeren deze conversie uit?

Ik maak nu gebruik van XmlSerializer in combinatie met de XmlElementAttribute, XmlArray e.d.
Denk aan:
code:
1
2
3
4
5
6
7
8
9
[XmlRoot("company")]
public class Company
{
    [XmlElement("compName")]
    public string Name = "Test Inc";

    [XmlElement("checked"]
    public bool Checked = false;
}

Mijn echte code bestaat natuurlijk netjes met Fields, Constructors en Properties, maar dit is even ter illustratie. Hieronder mijn serialize methode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static string Serialize(object obj) {
    string xml;
            
    XmlSerializerNamespaces xmlNameSpaces = new XmlSerializerNamespaces();
    xmlNameSpaces.Add(String.Empty, String.Empty);

    MemoryStream stream = new MemoryStream();
    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    serializer.Serialize(stream, obj, xmlNameSpaces);

    xml = Encoding.UTF8.GetString(stream.ToArray()); 
    stream.Close();

    return xml;
}

Dit zal ongeveer dit geven:
code:
1
2
3
4
<company>
 <compName>Test Inc</compName>
 <checked>False</checked>
</company>

Ik wil:
code:
1
2
3
4
<company>
 <compName>Test Inc</compName>
 <checked>N</checked>
</company>


Weet iemand hoe je deze conversie plaats laat vinden tijdens het (de)serializen?

[ Voor 5% gewijzigd door Zyphrax op 12-01-2005 10:23 ]

Any sufficiently advanced technology is equivalent to magic.


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:16
Is die service een xml webservice ? Zoja, dan heb je events zoals BeforeSerialize en AfterSerialize, etc.... (of hheet dat nu sinks :? ) die je wellicht kan gebruiken.

https://fgheysels.github.io/


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 11-05 17:04
Implementeer IXmlSerializable en gebruik WriteXml() (m.b.v. reflection) om het gewenste gedrag te vertonen.

http://msdn2.microsoft.com/library/fhd7bk0a.aspx
(in V1.1. is (helemaal) geen documentatie, maar wel de interface beschikbaar)

Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
De service waar ik het naar toe stuur is een HTTP service, dus ik post de XML request er echt naar toe en krijg een XML response terug (vanuit de code mbv WebRequest).

Het is jammer dat dit niet te sturen is direct met reflection in de vorm van bijv. XmlElementFormat. Waarschijnlijk zal hier in v.2 van het framework wel extra aandacht aan besteedt worden.

Bedankt voor de tip, ik heb alleen echt geen idee hoe ik dan aan de slag moet met die interface.

Any sufficiently advanced technology is equivalent to magic.