Ik ben bezig met het (de)serializeren van xml in .NET. Nu heb ik een groot aantal documenten met verschillende collecties die eigenlijk exact hetzelfde zijn, behalve het type van de elementen die er in zitten.
Ik probeer bijvoorbeeld de volgende XML te serializeren
Dat krijg ik op zich prima voor elkaar met de volgende definitie
Echter is het nogal veel werk om voor alle collecties een custom type te gaan definieren. Ik zou liever een generieke collectie maken waar ik dan met generics aangeef welk type ik gebruik. Eigenlijk net zoals ik met XmlArray en XmlArrayItem kan doen
Het probleem daarbij is dat ik weer geen extra ( generieke ) properties bij de collectie toe kan voegen.
Is er een manier waarop ik bijvoorbeeld de volgende collectie kan serializeren, waarbij ik bij het gebruik aan kan geven welk type en tagname er gebruikt wordt?
Ik probeer bijvoorbeeld de volgende XML te serializeren
XML:
1
2
3
4
5
6
7
8
9
10
| <?xml version="1.0" encoding="utf-16"?> <response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" errorcode="1"> <foos count="1"> <foo>Foo1</foo> </foos> <bars count="2"> <bar>Bar1</bar> <bar>Bar2</bar> </bars> </response> |
Dat krijg ik op zich prima voor elkaar met de volgende definitie
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
| [XmlRoot("response")] public class Response { [XmlAttribute("errorcode")] public int ErrorCode { get; set; } [XmlElement("foos")] public FooCollection Foos { get; set; } [XmlElement("bars")] public BarCollection Bars { get; set; } } public class FooCollection { [XmlAttribute("count")] public int Count { get; set; } [XmlElement("foo")] public Foo[] Foos { get; set; } } public class BarCollection { [XmlAttribute("count")] public int Count { get; set; } [XmlElement("bar")] public Bar[] Bars { get; set; } } public class Foo { [XmlText] public string Value { get; set; } } public class Bar { [XmlText] public string Value { get; set; } } |
Echter is het nogal veel werk om voor alle collecties een custom type te gaan definieren. Ik zou liever een generieke collectie maken waar ik dan met generics aangeef welk type ik gebruik. Eigenlijk net zoals ik met XmlArray en XmlArrayItem kan doen
C#:
1
2
| [XmlArray("foos"), XmlArrayItem("foo")] public Foo[] Foos { get; set; } |
Het probleem daarbij is dat ik weer geen extra ( generieke ) properties bij de collectie toe kan voegen.
Is er een manier waarop ik bijvoorbeeld de volgende collectie kan serializeren, waarbij ik bij het gebruik aan kan geven welk type en tagname er gebruikt wordt?
C#:
1
2
3
4
5
6
7
| public class MyCollection<T> { [XmlAttribute("count")] public int Count { get; set; } public T[] Items { get; set; } } |
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”