注意order和lineItem节点都是允许重复出现的
以下是继承自ConfigurationSection的自定义配置节点类:
1
public class OrdersSection : ConfigurationSection
2

{
3
[ConfigurationProperty("companyID", IsRequired = true)]
4
public string CompanyID
5
{
6
get
7
{
8
return (string)base["companyID"];
9
}
10
set
11
{
12
base["companyID"] = value;
13
}
14
}
15
16
[ConfigurationProperty("", IsDefaultCollection = true)]
17
public OrderElementCollection Orders
18
{
19
get
20
{
21
return (OrderElementCollection)base[""];
22
}
23
}
24
}
25
26
public class OrderElementCollection : ConfigurationElementCollection
27

{
28
protected override ConfigurationElement CreateNewElement()
29
{
30
return new OrderElement();
31
}
32
protected override object GetElementKey(ConfigurationElement element)
33
{
34
return ((OrderElement)element).Number;
35
}
36
37
public override ConfigurationElementCollectionType CollectionType
38
{
39
get
40
{
41
return ConfigurationElementCollectionType.BasicMap;
42
}
43
}
44
protected override string ElementName
45
{
46
get
47
{
48
return "order";
49
}
50
}
51
52
public OrderElement this[int index]
53
{
54
get
55
{
56
return (OrderElement)BaseGet(index);
57
}
58
set
59
{
60
if (BaseGet(index) != null)
61
{
62
BaseRemoveAt(index);
63
}
64
BaseAdd(index, value);
65
}
66
}
67
}
68
69
public class OrderElement : ConfigurationElement
70

{
71
[ConfigurationProperty("number", IsRequired = true)]
72
public string Number
73
{
74
get
75
{
76
return (string)base["number"];
77
}
78
set
79
{
80
base["number"] = value;
81
}
82
}
83
84
[ConfigurationProperty("amount", IsRequired = true)]
85
public double Amount
86
{
87
get
88
{
89
return (double)base["amount"];
90
}
91
set
92
{
93
base["amount"] = value;
94
}
95
}
96
97
[ConfigurationProperty("lineItems", IsDefaultCollection = true)]
98
public LineItemElementCollection LineItems
99
{
100
get
101
{
102
return (LineItemElementCollection)base["lineItems"];
103
}
104
}
105
}
106
107
public class LineItemElementCollection : ConfigurationElementCollection
108

{
109
[ConfigurationProperty("warehouseNumber", IsRequired = true)]
110
public string WarehouseNumber
111
{
112
get
113
{
114
return (string)base["warehouseNumber"];
115
}
116
set
117
{
118
base["warehouseNumber"] = value;
119
}
120
}
121
122
protected override ConfigurationElement CreateNewElement()
123
{
124
return new LineItemElement();
125
}
126
protected override object GetElementKey(ConfigurationElement element)
127
{
128
return ( (LineItemElement)element ).Number;
129
}
130
131
public override ConfigurationElementCollectionType CollectionType
132
{
133
get
134
{
135
return ConfigurationElementCollectionType.BasicMap;
136
}
137
}
138
protected override string ElementName
139
{
140
get
141
{
142
return "lineItem";
143
}
144
}
145
146
public LineItemElement this[int index]
147
{
148
get
149
{
150
return (LineItemElement)BaseGet(index);
151
}
152
set
153
{
154
if (BaseGet(index) != null)
155
{
156
BaseRemoveAt(index);
157
}
158
BaseAdd(index, value);
159
}
160
}
161
}
162
163
public class LineItemElement : ConfigurationElement
164

{
165
[ConfigurationProperty("number", IsKey=true, IsRequired = true)]
166
public string Number
167
{
168
get
169
{
170
return (string)base["number"];
171
}
172
set
173
{
174
base["number"] = value;
175
}
176
}
177
178
[ConfigurationProperty("description", IsRequired = true)]
179
public string Description
180
{
181
get
182
{
183
return (string)base["description"];
184
}
185
set
186
{
187
base["description"] = value;
188
}
189
}
190
}