Bonjour,
J'ai un Objet A qui contient des Objet B, C et D.
B, C et D ont besoin de certaines informations de A.
Pour ce faire, j'ai créé une classe O contenant ces informations communes, fait hériter de O les classes A, B, C et D et mis dans A une procédure pour passer les informations lors de l'affectation des propriétés pointant vers B, C et D.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 using System; namespace Test { public class O { public String Info1 { get; set; } public String Info2 { get; set; } public String Info3 { get; set; } } public class A : O { public String InfoA1 { get; set; } public String InfoA2 { get; set; } public String InfoA3 { get; set; } public String InfoA4 { get; set; } public String InfoA5 { get; set; } B b = null; C c = null; D d = null; public B B { get { return b; } set { b = value; Fill(value); } } public C C { get { return c; } set { c = value; Fill(value); } } public D D { get { return d; } set { d = value; Fill(value); } } void Fill(O o) { o.Info1 = Info1; o.Info2 = Info2; o.Info3 = Info3; } } public class B : O { public String InfoB1 { get; set; } public String InfoB2 { get; set; } } public class C : O { public String InfoC1 { get; set; } } public class D : O { public String InfoD1 { get; set; } } }
Logiquement le résultat de la sérialisation est le suivant :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?xml version="1.0"?> <A xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Info1>1</Info1> <Info2>2</Info2> <Info3>3</Info3> <InfoA1>A1</InfoA1> <InfoA2>A2</InfoA2> <InfoA3>A3</InfoA3> <InfoA4>A4</InfoA4> <InfoA5>A5</InfoA5> <B> <Info1>1</Info1> <Info2>2</Info2> <Info3>3</Info3> <InfoB1>B1</InfoB1> <InfoB2>B2</InfoB2> </B> <C> <Info1>1</Info1> <Info2>2</Info2> <Info3>3</Info3> <InfoC1>C1</InfoC1> </C> <D> <Info1>1</Info1> <Info2>2</Info2> <Info3>3</Info3> <InfoD1>D1</InfoD1> </D> </A>
Mon but est d'éviter de répéter les informations communes dans les nœuds B, C et D.
Je souhaite les avoirs dans le nœud A uniquement laisser la méthode Fill faire son travail pour remplir B, C et D lors de la déserialisation.
J'ai essayé de créer une classe O2 héritant de O et d'y mettre un attribut XmlIgnore pour ensuite faire hériter B, C et D de O2 mais XmlIgnore n'est valide que sur une propriété.
A moins que O2 répète toute les propriété et n'hérite pas de O, quelle autre possibilité s'offre à moi ?
Si ça peut aider voici le code utiliser pour sérialiser et déserialiser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 XmlSerializer serializer = new XmlSerializer(typeof(A)); using (Stream file = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { serializer.Serialize(file, a); }Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 XmlSerializer serializer = new XmlSerializer(typeof(A)); using (TextReader file = new StreamReader(fileName)) { a = (A)serializer.Deserialize(file); }
Partager