Hallo allemaal,
een beetje een wazige topictitel, ik weet t, maar ik zal het uitleggen.
Ik moet voor een logger een groot array van klasses wegschrijven in een XML bestand. Dit doe ik met behulp van de XmlSerializer klasse. Deze Serializer schrijft het DateTime veld als de volgende waarde weg:
Deze Serializer klasse kan echter niet zonder meer later iets toevoegen aan het bestand. Hiervoor laad ik het XML bestand in een instantie van XmlDocument, voeg toe wat ik toe wil voegen en schrijf het bestand weer weg. Dit gebeurd echter op een andere manier:
Een paar stukjes code om de implementatie van de Serializer en de 'appender' weer te geven
Zowel de Serializer als de appendPacket maakt gebruikt van dezelfde TextReader en Writer, maar toch wordt het anders weggeschreven.
In eerste instantie laadde ik rechtstreeks de XML file in het XmlDocument, maar omdat ik dacht dat het met de utf8 encoding had te maken, heb ik de TextReader en Writer gebruikt. Hier heeft het echter niet mee te maken.
Wat ik wel met succes geprobeerd heb is het invoeren van de Ticks i.p.v. een leesbare datum. De 'klant' wil echter een leesbare XML file, en Ticks zijn nou niet bepaald leesbaar
Als ik de get-methode van de private Timestamp opvraag, worden deze in de MessageBox zowel in Serializer als in appendPacket hetzelfde weergegeven.
Hoe de datum uiteindelijk weggeschreven zal worden (Serializer manier, of andere manier) maakt niet zo heel veel uit.
Iemand een idee?
een beetje een wazige topictitel, ik weet t, maar ik zal het uitleggen.
Ik moet voor een logger een groot array van klasses wegschrijven in een XML bestand. Dit doe ik met behulp van de XmlSerializer klasse. Deze Serializer schrijft het DateTime veld als de volgende waarde weg:
code:
1
| <Timestamp>2007-03-15T18:08:59.5106663+01:00</Timestamp> |
Deze Serializer klasse kan echter niet zonder meer later iets toevoegen aan het bestand. Hiervoor laad ik het XML bestand in een instantie van XmlDocument, voeg toe wat ik toe wil voegen en schrijf het bestand weer weg. Dit gebeurd echter op een andere manier:
code:
1
| <Timestamp>15-3-2007 18:08:59</Timestamp> |
Een paar stukjes code om de implementatie van de Serializer en de 'appender' weer te geven
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| /* Onderstaande code zal ongetwijfeld netter kunnen ;) */ class XMLSerializer { XmlTextWriter xtw; XmlTextReader xtr; public void openTextWriter(string fname) { xtw = new XmlTextWriter(fname, Encoding.UTF8); xtw.Formatting = Formatting.Indented; } public void closeTextWriter() { xtw.Close(); } public void openTextReader(string fname) { xtr = new XmlTextReader(fname); } public void closeTextReader() { xtr.Close(); } public void SerializeObject(Packet[] pckArr) { XmlSerializer xs = new XmlSerializer(typeof(Packet[])); xs.Serialize(xtw,pckArr); } public void appendPacket(Packet pck) { XmlDocument doc = new XmlDocument(); openTextReader(); doc.Load(xtr); closeTextReader(); XmlElement elPacket = doc.CreateElement("Packet"); string elK0 = "<Timestamp>" + pck.Timestamp + "</Timestamp>"; string elK1 = "<From>" + pck.From + "</From>"; string elK2 = "<To>" + pck.To + "</To>"; string elK3 = "<Data>" + pck.Data + "</Data>"; string elK4 = "<Status>" + pck.Status + "</Status>"; elPacket.InnerXml = elK0 + elK1 + elK2 + elK3 + elK4; doc.DocumentElement.AppendChild(elPacket); openTextWriter(); doc.Save(xtw); closeTextWriter(); } } |
Zowel de Serializer als de appendPacket maakt gebruikt van dezelfde TextReader en Writer, maar toch wordt het anders weggeschreven.
In eerste instantie laadde ik rechtstreeks de XML file in het XmlDocument, maar omdat ik dacht dat het met de utf8 encoding had te maken, heb ik de TextReader en Writer gebruikt. Hier heeft het echter niet mee te maken.
Wat ik wel met succes geprobeerd heb is het invoeren van de Ticks i.p.v. een leesbare datum. De 'klant' wil echter een leesbare XML file, en Ticks zijn nou niet bepaald leesbaar
Als ik de get-methode van de private Timestamp opvraag, worden deze in de MessageBox zowel in Serializer als in appendPacket hetzelfde weergegeven.
Hoe de datum uiteindelijk weggeschreven zal worden (Serializer manier, of andere manier) maakt niet zo heel veel uit.
Iemand een idee?
edit:
Deze had dus in programming moeten staan, en niet in SE&A volgens...
Deze had dus in programming moeten staan, en niet in SE&A volgens...
[ Voor 9% gewijzigd door RvL op 15-03-2007 19:26 . Reden: Toevoegingen ]
Liefde maakt een smal bed breed!
Nu de dekens nog...