-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.htm
391 lines (385 loc) · 14.9 KB
/
README.htm
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>WDDX.NET</title>
<style type="text/css"> /*<![CDATA[*/ <!-- body,td,th{background:#FFF;font:10pt Verdana,Geneva,Arial,Helvetica,sans-serif;}
table{border-collapse:collapse;}
th{font-weight:bold;text-align:center;}
--> /*]]>*/
</style>
</head>
<body>
<h3>WDDX.Net</h3>
<p>
<strong>Version 1.0.4</strong>
</p>
<p>
<a href="mailto:jmueller@swiftk.com">Joel Mueller</a>
</p>
<p>
The only classes you need to know are WddxSerializer and
WddxDeserializer. Click <a href="WDDX.Net.chm">here</a> for
documentation. For those who want to play with the source, full
documentation on the internal API is also supplied <a
href="WDDX.Net%20Internals.chm">here</a>. See the "WDDX Tests"
project for usage samples and tests.
</p>
<p>
The following table compares the WDDX data types with the .NET
Common Language Runtime types that they map to.
</p>
<table border="1" cellspacing="0">
<tr>
<th>
WDDX
</th>
<th>
.NET CLR
</th>
</tr>
<tr>
<td>
null
</td>
<td>
A null object reference (null in C#, Nothing in VB.NET)
</td>
</tr>
<tr>
<td>
boolean
</td>
<td>
System.Boolean (bool in C#, Boolean in VB.NET)
</td>
</tr>
<tr>
<td>
number
</td>
<td align="middle">
One of the following, depending on what fits:
<table border="1" cellspacing="0">
<tr>
<th>
CLR
</th>
<th>
C#
</th>
<th>
VB.NET
</th>
</tr>
<tr>
<td>
System.Int16
</td>
<td>
short
</td>
<td>
Short
</td>
</tr>
<tr>
<td>
System.Int32
</td>
<td>
int
</td>
<td>
Integer
</td>
</tr>
<tr>
<td>
System.Int64
</td>
<td>
long
</td>
<td>
Long
</td>
</tr>
<tr>
<td>
System.Single
</td>
<td>
float
</td>
<td>
Single
</td>
</tr>
<tr>
<td>
System.Double
</td>
<td>
double
</td>
<td>
Double
</td>
</tr>
<tr>
<td>
System.Decimal
</td>
<td>
decimal
</td>
<td>
Decimal
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
dateTime
</td>
<td>
System.DateTime (Date in VB.NET)
</td>
</tr>
<tr>
<td>
string
</td>
<td>
System.String (string in C#, String in VB.NET)
</td>
</tr>
<tr>
<td>
array
</td>
<td>
System.Collections.ArrayList (see notes below for details)
</td>
</tr>
<tr>
<td>
struct
</td>
<td>
System.Collections.Hashtable (see notes below for details)
</td>
</tr>
<tr>
<td>
recordset
</td>
<td>
System.Data.DataSet (see notes below for details)
</td>
</tr>
<tr>
<td>
binary
</td>
<td>
<p>
A System.Byte array (byte[] in C#, Byte() in VB.NET)
</p>
</td>
</tr>
<tr>
<td>
char
</td>
<td>
System.Char (char in C#, Char in VB.NET)
</td>
</tr>
</table>
<p>
* The precision of the System.Decimal type is not directly supported by
WDDX; when serialized if numbers have higher precision than 15 they will be first converted to Double.
</p>
<p>
<strong>New in 1.0.4 (Bilal Soylu):</strong>
</p>
<UL>
<li>updraded to .net framework 3</li>
<li>updated unit test to nunit 2.5</li>
<li>corrected iso8601 date and time interpretation and unit tests. Hours are now correctly translated across time zones.Corrected date time serialization.</li>
<li>fixed IsValid() function</li>
<li>introduced System.decimal as an alternate numeric return for improvement in precision for up to 15 digits after the decimal</li>
<li>upgraded XML checking components to framework 3. Removed obsolete XMLValidatingReader calls in core validators.</li>
<li>ignore whitespace and comments so human formatted xml can be parsed without exceptions.</li>
<li>fix handling of dataset with starting null-data records</li>
</UL>
<p>
<strong>New in 1.0.3:</strong>
</p>
<UL>
<LI>Fixed a bug in string deserialization that could
result in an infinite loop in certain situations.
<LI>Updated unit tests to work with <A
href="http://nunit.sourceforge.net/">NUnit 2.0</A>.
<LI>Slight performance improvement when deserializing large
recordsets.</LI></UL>
<P><STRONG>New in 1.0.2:</STRONG> </P>
<ul>
<li>
Fixed minor deserialization bugs for dateTime and string
elements in large recordsets.
</li>
</ul>
<p>
<strong>New in 1.0.1:</strong>
</p>
<ul>
<li>
Fixed date parsing to properly
handle non-ISO8601 dates produced by ColdFusion.
<li>
Refactored for better error handling during
serialization.
<li>
Known issue - any non-ISO8601 dates (such as
2002-7-2T8:3:0-5:0, without leading zeros) will cause XSD
validation to fail even though the parser can handle these
dates. For this reason, is it possible for
WddxDeserializer.IsValid() to return false on a packet that it
can successfully parse.
</li>
</ul>
<p>
<strong>New in 1.0:</strong>
</p>
<ul>
<li>
Support for NUnit 1.11 in the unit tests.
</li>
</ul>
<p>
<strong>New in RC2:</strong>
</p>
<ul>
<li>
Fixed a bug with serialization of database nulls from
a DataSet.
<li>
Made the addition of the XML document declaration optional,
with a default of false, as CFWDDX throws an error rather than
ignoring the XML declaration.
</li>
</ul>
<p>
<strong>New in RC1:</strong>
</p>
<ul>
<li>
Added support for WDDX validation via XSD. This is
supported in two ways - WddxDeserializer.IsValid() will determine if the WDDX
packet passed to it is valid WDDX without attempting to deserialize it, and is
extremely fast. There is also an option to validate the WDDX as it is being
deserialized; this option will cause the deserializer to throw an exception
detailing what exactly is wrong with any invalid WDDX that it encounters. Note
that the XSD in question is embedded into the WDDX.Net DLL, meaning that there
is only one file to work with, and no internet access is required to download
an external XSD.
<li>
Added support for the WDDX "char" element for escaped
control characters in strings.
<li>
Fixed dateTime serialization and deserialization to properly
convert to/from UTC time.
</li>
</ul>
<b>Serialization:</b>
<ul>
<li>
Can serialize to a string or a pre-existing
XmlTextWriter. The pre-existing XmlTextWriter can point to a string, a file, a
network stream, the Response stream in ASP.NET, database, etc...
<li>
Any object that implements the IDictionary interface
is serialized into a WDDX "struct" element. This includes the Hashtable, as
well as most other classes that contain name/value pairs.
<li>
Any object that implements the ICollection interface
is serialized into a WDDX "array" element. This includes all arrays of all
data types (jagged, single-, and multi-dimensional) as well as the ArrayList
class, and most other classes that contain a collection of items. Since WDDX
doesn't support true multi-dimensional arrays, they are currently flattened to
a one-dimensional array upon serialization.
<li>
A byte array is serialized as a WDDX "binary"
element.
<li>
A DataSet is serialized as a WDDX "recordset"
element. In the case of a DataSet that contains multiple DataTables, it is
serialized as a WDDX "struct" element that contains multiple "recordset"
elements. The name of each DataTable is the key into the struct.
<li>
Any object that doesn't fit a pre-defined serializer, but does
have properties or fields will be serialized as a WDDX "struct"
element, with the property names/values being the names and
values in the struct. If the object has no properties or
fields, the serializer will call the ToString() method of the
object, and serialize it as a WDDX "string" element.
</li>
</ul>
<b>Deserialization:</b>
<ul>
<li>
Can deserialize from a string or a pre-existing
XmlTextReader. The pre-existing XmlTextReader can point to a string, a file, a
network stream, a database, etc...
<li>
A WDDX "array" element is deserialized into an ArrayList
object. In the case of nested (or jagged) arrays, it will be an
ArrayList object containing other ArrayList objects. Note that
a single-dimensional ArrayList can be converted to an array of
native types using the following syntax (C#):<br >
<tt>int[] intArray =
(int[])theArrayList.ToArray(typeof(int));</tt>
<li>
A WDDX "struct" element is deserialized into a
Hashtable object.
<li>
A WDDX "recordset" element is deserialized into a
DataSet object. Data types and column names are preserved.
<li>
A WDDX "binary" element is deserialized into a byte array.
</li>
</ul>
<b>Still to be done:</b>
<ul>
<li>
Find a way to express ColdFusion's "loose"
interpretation of ISO8601 dates in XSD form, so that WDDX can be reliably
validated.
<li>
Implement support for the optional "type" attribute
supported by most WDDX elements. This would allow type preservation for better
round-trips, but would not benefit any non-.NET languages.
<li>
Convert multi-dimensional arrays to nested/jagged
arrays before serialization.
<li>
Optimize array deserialization to produce arrays of
native types when possible, instead of ArrayList objects.
<li>
The above items are more likely to be done if I know someone
out there needs/will use them. So if any of these sound good,
<a href="mailto:jmueller@swiftk.com">send me a note</a>!
</li>
</ul>
<p style="FONT-SIZE:10px">
LEGALESE: This library is provided without any warranty, expressed
or implied. I hope it's useful to you, but if it's not, well, you
get what you pay for.
</p>
</body>
</html>