2 // XmlObjectSerializerTest.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
6 // Ankit Jain <JAnkit@novell.com>
8 // Copyright (C) 2005 Novell, Inc. http://www.novell.com
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 // This test code contains tests for both DataContractSerializer and
33 // NetDataContractSerializer. The code could be mostly common.
37 using System.Collections;
38 using System.Collections.Generic;
39 using System.Collections.ObjectModel;
42 using System.Runtime.Serialization;
45 using NUnit.Framework;
46 using System.Xml.Serialization;
47 using System.Xml.Schema;
49 namespace MonoTests.System.Runtime.Serialization
52 public class DataContractSerializerTest
54 static readonly XmlWriterSettings settings;
56 static DataContractSerializerTest ()
58 settings = new XmlWriterSettings ();
59 settings.OmitXmlDeclaration = true;
66 public string Member1;
70 [ExpectedException (typeof (ArgumentNullException))]
71 public void ConstructorTypeNull ()
73 new DataContractSerializer (null);
77 public void ConstructorKnownTypesNull ()
79 // null knownTypes is allowed.
80 new DataContractSerializer (typeof (Sample1), null);
81 new DataContractSerializer (typeof (Sample1), "Foo", String.Empty, null);
82 new DataContractSerializer (typeof (Sample1), new XmlDictionary ().Add ("Foo"), XmlDictionaryString.Empty, null);
86 [ExpectedException (typeof (ArgumentNullException))]
87 public void ConstructorNameNull ()
89 new DataContractSerializer (typeof (Sample1), null, String.Empty);
93 [ExpectedException (typeof (ArgumentNullException))]
94 public void ConstructorNamespaceNull ()
96 new DataContractSerializer (typeof (Sample1), "foo", null);
100 [ExpectedException (typeof (ArgumentOutOfRangeException))]
101 public void ConstructorNegativeMaxObjects ()
103 new DataContractSerializer (typeof (Sample1), null,
104 -1, false, false, null);
108 public void ConstructorMisc ()
110 new DataContractSerializer (typeof (GlobalSample1));
114 public void WriteObjectContent ()
116 StringWriter sw = new StringWriter ();
117 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
118 DataContractSerializer ser =
119 new DataContractSerializer (typeof (string));
120 xw.WriteStartElement ("my-element");
121 ser.WriteObjectContent (xw, "TEST STRING");
122 xw.WriteEndElement ();
124 Assert.AreEqual ("<my-element>TEST STRING</my-element>",
129 public void WriteObjectToStream ()
131 DataContractSerializer ser =
132 new DataContractSerializer (typeof (int));
133 MemoryStream sw = new MemoryStream ();
134 ser.WriteObject (sw, 1);
135 string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
136 byte[] buf = sw.ToArray ();
137 Assert.AreEqual (expected, Encoding.UTF8.GetString (buf, 0, buf.Length));
141 public void ReadObjectFromStream ()
143 DataContractSerializer ser =
144 new DataContractSerializer (typeof (int));
145 string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
146 byte[] buf = Encoding.UTF8.GetBytes (expected);
147 MemoryStream sw = new MemoryStream (buf);
148 object res = ser.ReadObject (sw);
149 Assert.AreEqual (1, res);
155 public void SerializeInt ()
157 DataContractSerializer ser =
158 new DataContractSerializer (typeof (int));
159 SerializeInt (ser, "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>");
164 [Category ("NotWorking")]
165 public void NetSerializeInt ()
167 NetDataContractSerializer ser =
168 new NetDataContractSerializer ();
169 // z:Assembly="0" ???
170 SerializeInt (ser, String.Format ("<int z:Type=\"System.Int32\" z:Assembly=\"0\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>", typeof (int).Assembly.FullName));
173 void SerializeInt (XmlObjectSerializer ser, string expected)
175 StringWriter sw = new StringWriter ();
176 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
177 ser.WriteObject (w, 1);
179 Assert.AreEqual (expected, sw.ToString ());
182 // pass typeof(DCEmpty), serialize int
185 public void SerializeIntForDCEmpty ()
187 DataContractSerializer ser =
188 new DataContractSerializer (typeof (DCEmpty));
190 SerializeIntForDCEmpty (ser, "<DCEmpty xmlns:d1p1=\"http://www.w3.org/2001/XMLSchema\" i:type=\"d1p1:int\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\">1</DCEmpty>");
193 void SerializeIntForDCEmpty (XmlObjectSerializer ser, string expected)
195 StringWriter sw = new StringWriter ();
196 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
197 ser.WriteObject (w, 1);
199 XmlComparer.AssertAreEqual (expected, sw.ToString ());
205 public void SerializeEmptyClass ()
207 DataContractSerializer ser =
208 new DataContractSerializer (typeof (DCEmpty));
209 SerializeEmptyClass (ser, "<DCEmpty xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
213 [Category ("NotWorking")]
214 public void NetSerializeEmptyClass ()
216 NetDataContractSerializer ser =
217 new NetDataContractSerializer ();
218 SerializeEmptyClass (ser, String.Format ("<DCEmpty xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" z:Id=\"1\" z:Type=\"MonoTests.System.Runtime.Serialization.DCEmpty\" z:Assembly=\"{0}\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />", this.GetType ().Assembly.FullName));
221 void SerializeEmptyClass (XmlObjectSerializer ser, string expected)
223 StringWriter sw = new StringWriter ();
224 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
225 ser.WriteObject (w, new DCEmpty ());
227 Assert.AreEqual (expected, sw.ToString ());
230 // string (primitive)
233 public void SerializePrimitiveString ()
235 XmlObjectSerializer ser =
236 new DataContractSerializer (typeof (string));
237 SerializePrimitiveString (ser, "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">TEST</string>");
241 [Category ("NotWorking")]
242 public void NetSerializePrimitiveString ()
244 XmlObjectSerializer ser = new NetDataContractSerializer ();
245 SerializePrimitiveString (ser, "<string z:Type=\"System.String\" z:Assembly=\"0\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">TEST</string>");
248 void SerializePrimitiveString (XmlObjectSerializer ser, string expected)
250 StringWriter sw = new StringWriter ();
251 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
252 ser.WriteObject (w, "TEST");
254 Assert.AreEqual (expected, sw.ToString ());
257 // QName (primitive but ...)
260 [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
261 public void SerializePrimitiveQName ()
263 XmlObjectSerializer ser =
264 new DataContractSerializer (typeof (XmlQualifiedName));
265 SerializePrimitiveQName (ser, "<z:QName xmlns:d7=\"urn:foo\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\">d7:foo</z:QName>");
269 [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
270 public void NetSerializePrimitiveQName ()
272 XmlObjectSerializer ser = new NetDataContractSerializer ();
273 SerializePrimitiveQName (ser, "<z:QName z:Type=\"System.Xml.XmlQualifiedName\" z:Assembly=\"System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" xmlns:d7=\"urn:foo\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\">d7:foo</z:QName>");
276 void SerializePrimitiveQName (XmlObjectSerializer ser, string expected)
278 StringWriter sw = new StringWriter ();
279 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
280 ser.WriteObject (w, new XmlQualifiedName ("foo", "urn:foo"));
282 Assert.AreEqual (expected, sw.ToString ());
288 public void SerializeSimpleClass1 ()
290 DataContractSerializer ser =
291 new DataContractSerializer (typeof (DCSimple1));
292 SerializeSimpleClass1 (ser, "<DCSimple1 xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><Foo>TEST</Foo></DCSimple1>");
296 [ExpectedException (typeof (SerializationException))]
297 [Category ("NotWorking")] // behavior changed in 3.5/SP1
298 public void SerializeSimpleXml ()
300 DataContractSerializer ser =
301 new DataContractSerializer (typeof (SimpleXml));
302 SerializeSimpleClass1 (ser, @"<simple i:type=""d1p1:DCSimple1"" xmlns:d1p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><d1p1:Foo>TEST</d1p1:Foo></simple>");
306 [Category ("NotWorking")]
307 public void NetSerializeSimpleClass1 ()
309 NetDataContractSerializer ser =
310 new NetDataContractSerializer ();
311 SerializeSimpleClass1 (ser, String.Format ("<DCSimple1 xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" z:Id=\"1\" z:Type=\"MonoTests.System.Runtime.Serialization.DCSimple1\" z:Assembly=\"{0}\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><Foo z:Id=\"2\">TEST</Foo></DCSimple1>", this.GetType ().Assembly.FullName));
314 void SerializeSimpleClass1 (XmlObjectSerializer ser, string expected)
316 StringWriter sw = new StringWriter ();
317 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
318 ser.WriteObject (w, new DCSimple1 ());
320 Console.WriteLine(sw.ToString());
321 Assert.AreEqual (expected, sw.ToString ());
324 // NonDC (behavior changed in 3.5/SP1; not it's not rejected)
327 public void SerializeNonDC ()
329 DataContractSerializer ser = new DataContractSerializer (typeof (NonDC));
330 var sw = new StringWriter ();
331 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
332 ser.WriteObject (w, new NonDC ());
334 Assert.AreEqual ("<NonDC xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Whee>whee!</Whee></NonDC>".Replace ('\'', '"'), sw.ToString ());
340 public void SerializeDCHasNonDC ()
342 DataContractSerializer ser = new DataContractSerializer (typeof (DCHasNonDC));
343 var sw = new StringWriter ();
344 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
345 ser.WriteObject (w, new DCHasNonDC ());
347 Assert.AreEqual ("<DCHasNonDC xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Hoge><Whee>whee!</Whee></Hoge></DCHasNonDC>".Replace ('\'', '"'), sw.ToString ());
353 // DCHasSerializable itself is DataContract and has a field
354 // whose type is not contract but serializable.
355 public void SerializeSimpleSerializable1 ()
357 DataContractSerializer ser = new DataContractSerializer (typeof (DCHasSerializable));
358 StringWriter sw = new StringWriter ();
359 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
360 ser.WriteObject (w, new DCHasSerializable ());
362 Assert.AreEqual ("<DCHasSerializable xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><Ser><Doh>doh!</Doh></Ser></DCHasSerializable>", sw.ToString ());
366 public void SerializeDCWithName ()
368 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
369 StringWriter sw = new StringWriter ();
370 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
371 ser.WriteObject (w, new DCWithName ());
373 Assert.AreEqual ("<Foo xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><FooMember>value</FooMember></Foo>", sw.ToString ());
377 public void SerializeDCWithEmptyName1 ()
379 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyName));
380 StringWriter sw = new StringWriter ();
381 DCWithEmptyName dc = new DCWithEmptyName ();
382 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
384 ser.WriteObject (w, dc);
385 } catch (InvalidDataContractException) {
389 Assert.Fail ("Expected InvalidDataContractException");
393 [Category ("NotWorking")]
394 public void SerializeDCWithEmptyName2 ()
396 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
397 StringWriter sw = new StringWriter ();
399 /* DataContractAttribute.Name == "", not valid */
400 DCWithEmptyName dc = new DCWithEmptyName ();
401 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
403 ser.WriteObject (w, dc);
404 } catch (InvalidDataContractException) {
408 Assert.Fail ("Expected InvalidDataContractException");
412 [Category ("NotWorking")]
413 public void SerializeDCWithNullName ()
415 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithNullName));
416 StringWriter sw = new StringWriter ();
417 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
419 /* DataContractAttribute.Name == "", not valid */
420 ser.WriteObject (w, new DCWithNullName ());
421 } catch (InvalidDataContractException) {
425 Assert.Fail ("Expected InvalidDataContractException");
429 public void SerializeDCWithEmptyNamespace1 ()
431 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyNamespace));
432 StringWriter sw = new StringWriter ();
433 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
434 ser.WriteObject (w, new DCWithEmptyNamespace ());
441 public void SerializeWrappedClass ()
443 DataContractSerializer ser =
444 new DataContractSerializer (typeof (Wrapper.DCWrapped));
445 SerializeWrappedClass (ser, "<Wrapper.DCWrapped xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
449 [Category ("NotWorking")]
450 public void NetSerializeWrappedClass ()
452 NetDataContractSerializer ser =
453 new NetDataContractSerializer ();
454 SerializeWrappedClass (ser, String.Format ("<Wrapper.DCWrapped xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" z:Id=\"1\" z:Type=\"MonoTests.System.Runtime.Serialization.Wrapper+DCWrapped\" z:Assembly=\"{0}\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />", this.GetType ().Assembly.FullName));
457 void SerializeWrappedClass (XmlObjectSerializer ser, string expected)
459 StringWriter sw = new StringWriter ();
460 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
461 ser.WriteObject (w, new Wrapper.DCWrapped ());
463 Assert.AreEqual (expected, sw.ToString ());
468 // CollectionContainer : Items must have a setter.
469 [ExpectedException (typeof (InvalidDataContractException))]
470 [Category ("NotWorking")]
472 public void SerializeReadOnlyCollectionMember ()
474 DataContractSerializer ser =
475 new DataContractSerializer (typeof (CollectionContainer));
477 StringWriter sw = new StringWriter ();
478 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
479 ser.WriteObject (w, null);
481 Assert.AreEqual ("<CollectionContainer i:nil='true' xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization' />".Replace ('\'', '"'), sw.ToString (), "#1");
483 sw = new StringWriter ();
484 var c = new CollectionContainer ();
487 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
488 ser.WriteObject (w, c);
490 Assert.AreEqual ("<CollectionContainer xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Items xmlns:d2p1='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><d2p1:string>foo</d2p1:string><d2p1:string>bar</d2p1:string></Items></CollectionContainer>".Replace ('\'', '"'), sw.ToString (), "#2");
493 // DataCollectionContainer : Items must have a setter.
495 //[ExpectedException (typeof (InvalidDataContractException))]
496 public void SerializeReadOnlyDataCollectionMember ()
498 DataContractSerializer ser =
499 new DataContractSerializer (typeof (DataCollectionContainer));
500 StringWriter sw = new StringWriter ();
501 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
502 ser.WriteObject (w, null);
504 Assert.AreEqual ("<DataCollectionContainer i:nil='true' xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization' />".Replace ('\'', '"'), sw.ToString (), "#1");
506 sw = new StringWriter ();
507 var c = new DataCollectionContainer ();
510 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
511 ser.WriteObject (w, c);
513 // LAMESPEC: this is bogus behavior. .NET serializes
514 // System.String as "string" without overriding its
515 // element namespace, but then it must be regarded as
516 // in parent's namespace. What if there already is an
517 // element definition for "string" with the same
519 Assert.AreEqual ("<DataCollectionContainer xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Items><string>foo</string><string>bar</string></Items></DataCollectionContainer>".Replace ('\'', '"'), sw.ToString (), "#2");
523 public void SerializeGuid ()
525 DataContractSerializer ser = new DataContractSerializer (typeof (Guid));
526 StringWriter sw = new StringWriter ();
527 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
528 ser.WriteObject (w, Guid.Empty);
531 "<guid xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">00000000-0000-0000-0000-000000000000</guid>",
536 public void SerializeEnum ()
538 DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
539 StringWriter sw = new StringWriter ();
540 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
541 ser.WriteObject (w, new Colors ());
545 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>",
550 public void SerializeEnum2 ()
552 DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
553 StringWriter sw = new StringWriter ();
554 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
555 ser.WriteObject (w, 0);
558 XmlComparer.AssertAreEqual (
559 @"<Colors xmlns:d1p1=""http://www.w3.org/2001/XMLSchema"" i:type=""d1p1:int"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">0</Colors>",
564 public void SerializeEnumWithDC ()
566 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
567 StringWriter sw = new StringWriter ();
568 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
569 ser.WriteObject (w, new ColorsWithDC ());
573 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>",
578 public void SerializeEnumWithNoDC ()
580 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsEnumMemberNoDC));
581 StringWriter sw = new StringWriter ();
582 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
583 ser.WriteObject (w, new ColorsEnumMemberNoDC ());
587 @"<ColorsEnumMemberNoDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</ColorsEnumMemberNoDC>",
592 public void SerializeEnumWithDC2 ()
594 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
595 StringWriter sw = new StringWriter ();
596 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
597 ser.WriteObject (w, 3);
600 XmlComparer.AssertAreEqual (
601 @"<_ColorsWithDC xmlns:d1p1=""http://www.w3.org/2001/XMLSchema"" i:type=""d1p1:int"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">3</_ColorsWithDC>",
606 [ExpectedException (typeof (SerializationException))]
607 public void SerializeEnumWithDCInvalid ()
609 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
610 StringWriter sw = new StringWriter ();
611 ColorsWithDC cdc = ColorsWithDC.Blue;
612 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
613 ser.WriteObject (w, cdc);
618 public void SerializeDCWithEnum ()
620 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum));
621 StringWriter sw = new StringWriter ();
622 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
623 ser.WriteObject (w, new DCWithEnum ());
627 @"<DCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><_colors>Red</_colors></DCWithEnum>",
632 public void SerializeDCWithTwoEnums ()
634 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithTwoEnums));
635 StringWriter sw = new StringWriter ();
636 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
637 DCWithTwoEnums e = new DCWithTwoEnums ();
638 e.colors = Colors.Blue;
639 e.colors2 = Colors.Green;
640 ser.WriteObject (w, e);
644 @"<DCWithTwoEnums xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors>Blue</colors><colors2>Green</colors2></DCWithTwoEnums>",
649 public void SerializeNestingDC2 ()
651 DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC2));
652 StringWriter sw = new StringWriter ();
653 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
654 NestingDC2 e = new NestingDC2 ();
655 e.Field = new NestedDC2 ("Something");
656 ser.WriteObject (w, e);
660 @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>",
665 public void SerializeNestingDC ()
667 DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC));
668 StringWriter sw = new StringWriter ();
669 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
670 NestingDC e = new NestingDC ();
671 e.Field1 = new NestedDC ("test1");
672 e.Field2 = new NestedDC ("test2");
673 ser.WriteObject (w, e);
677 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1><Name>test1</Name></Field1><Field2><Name>test2</Name></Field2></NestingDC>",
679 sw = new StringWriter ();
680 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
681 NestingDC e = new NestingDC ();
682 ser.WriteObject (w, e);
686 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1 i:nil=""true"" /><Field2 i:nil=""true"" /></NestingDC>",
691 public void SerializeDerivedDC ()
693 DataContractSerializer ser = new DataContractSerializer (typeof (DerivedDC));
694 StringWriter sw = new StringWriter ();
695 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
696 DerivedDC e = new DerivedDC ();
697 ser.WriteObject (w, e);
701 @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">0</baseVal><derivedVal>0</derivedVal></DerivedDC>",
706 public void SerializerDCArray ()
708 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum []));
709 StringWriter sw = new StringWriter ();
710 DCWithEnum [] arr = new DCWithEnum [2];
711 arr [0] = new DCWithEnum (); arr [0].colors = Colors.Red;
712 arr [1] = new DCWithEnum (); arr [1].colors = Colors.Green;
713 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
714 ser.WriteObject (w, arr);
717 XmlComparer.AssertAreEqual (
718 @"<ArrayOfDCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><DCWithEnum><_colors>Red</_colors></DCWithEnum><DCWithEnum><_colors>Green</_colors></DCWithEnum></ArrayOfDCWithEnum>",
723 public void SerializerDCArray2 ()
725 List<Type> known = new List<Type> ();
726 known.Add (typeof (DCWithEnum));
727 known.Add (typeof (DCSimple1));
728 DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
729 StringWriter sw = new StringWriter ();
730 object [] arr = new object [2];
731 arr [0] = new DCWithEnum (); ((DCWithEnum)arr [0]).colors = Colors.Red;
732 arr [1] = new DCSimple1 (); ((DCSimple1) arr [1]).Foo = "hello";
734 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
735 ser.WriteObject (w, arr);
738 XmlComparer.AssertAreEqual (
739 @"<ArrayOfanyType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCWithEnum""><d2p1:_colors>Red</d2p1:_colors></anyType><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCSimple1""><d2p1:Foo>hello</d2p1:Foo></anyType></ArrayOfanyType>",
744 public void SerializerDCArray3 ()
746 DataContractSerializer ser = new DataContractSerializer (typeof (int []));
747 StringWriter sw = new StringWriter ();
748 int [] arr = new int [2];
749 arr [0] = 1; arr [1] = 2;
751 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
752 ser.WriteObject (w, arr);
755 XmlComparer.AssertAreEqual (
756 @"<ArrayOfint xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><int>1</int><int>2</int></ArrayOfint>",
761 public void SerializeNonDCArray ()
763 DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
764 StringWriter sw = new StringWriter ();
765 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
766 ser.WriteObject (xw, new SerializeNonDCArrayType ());
768 Assert.AreEqual (@"<SerializeNonDCArrayType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><IPAddresses xmlns:d2p1=""http://schemas.datacontract.org/2004/07/System.Net"" /></SerializeNonDCArrayType>",
773 public void SerializeNonDCArrayItems ()
775 DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
776 StringWriter sw = new StringWriter ();
777 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
778 SerializeNonDCArrayType obj = new SerializeNonDCArrayType ();
779 obj.IPAddresses = new IPAddress [] {new IPAddress (new byte [] {1, 2, 3, 4})};
780 ser.WriteObject (xw, obj);
783 XmlDocument doc = new XmlDocument ();
784 doc.LoadXml (sw.ToString ());
785 XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
786 nsmgr.AddNamespace ("s", "http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization");
787 nsmgr.AddNamespace ("n", "http://schemas.datacontract.org/2004/07/System.Net");
788 nsmgr.AddNamespace ("a", "http://schemas.microsoft.com/2003/10/Serialization/Arrays");
790 Assert.AreEqual (1, doc.SelectNodes ("/s:SerializeNonDCArrayType/s:IPAddresses/n:IPAddress", nsmgr).Count, "#1");
791 Assert.AreEqual ("67305985", doc.SelectSingleNode ("/s:SerializeNonDCArrayType/s:IPAddresses/n:IPAddress/n:m_Address", nsmgr).InnerText, "#2");
792 XmlElement el = doc.SelectSingleNode ("/s:SerializeNonDCArrayType/s:IPAddresses/n:IPAddress/n:m_Numbers", nsmgr) as XmlElement;
793 Assert.IsNotNull (el, "#3");
794 Assert.AreEqual (8, el.SelectNodes ("a:unsignedShort", nsmgr).Count, "#4");
798 public void DeserializeEnum ()
800 Colors c = Deserialize<Colors> (
801 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>");
803 Assert.AreEqual (Colors.Red, c, "#de2");
807 public void DeserializeEnum2 ()
809 Colors c = Deserialize<Colors> (
810 @"<Colors xmlns:d1p1=""http://www.w3.org/2001/XMLSchema"" i:type=""d1p1:int"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">1</Colors>",
813 Assert.AreEqual (Colors.Green, c, "#de4");
817 [ExpectedException (typeof (SerializationException))]
818 public void DeserializeEnumInvalid1 ()
820 Deserialize<Colors> (
821 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></Colors>");
825 [ExpectedException (typeof (SerializationException))]
826 public void DeserializeEnumInvalid2 ()
828 Deserialize<Colors> (
829 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
833 [ExpectedException (typeof (SerializationException))]
834 public void DeserializeEnumInvalid3 ()
836 //"red" instead of "Red"
837 Deserialize<Colors> (
838 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">red</Colors>");
842 public void DeserializeEnumWithDC ()
844 ColorsWithDC cdc = Deserialize<ColorsWithDC> (
845 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>");
847 Assert.AreEqual (ColorsWithDC.Red, cdc, "#de6");
851 [ExpectedException (typeof (SerializationException))]
852 public void DeserializeEnumWithDCInvalid ()
854 Deserialize<ColorsWithDC> (
855 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">NonExistant</_ColorsWithDC>");
859 public void DeserializeDCWithEnum ()
861 DCWithEnum dc = Deserialize<DCWithEnum> (
862 @"<DCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><_colors>Red</_colors></DCWithEnum>");
864 Assert.AreEqual (Colors.Red, dc.colors, "#de8");
868 public void DeserializeNestingDC ()
870 NestingDC dc = Deserialize<NestingDC> (
871 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1><Name>test1</Name></Field1><Field2><Name>test2</Name></Field2></NestingDC>");
873 Assert.IsNotNull (dc.Field1, "#N1: Field1 should not be null.");
874 Assert.IsNotNull (dc.Field2, "#N2: Field2 should not be null.");
875 Assert.AreEqual ("test1", dc.Field1.Name, "#1");
876 Assert.AreEqual ("test2", dc.Field2.Name, "#2");
880 public void DeserializeNestingDC2 ()
882 NestingDC2 dc = Deserialize<NestingDC2> (
883 @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>");
885 Assert.IsNotNull (dc.Field, "#N1: Field should not be null.");
886 Assert.AreEqual ("Something", dc.Field.Name, "#N2");
890 public void DeserializeDerivedDC ()
892 DerivedDC dc = Deserialize<DerivedDC> (
893 @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">1</baseVal><derivedVal>2</derivedVal></DerivedDC>");
895 Assert.AreEqual (1, dc.baseVal, "#N1");
896 Assert.AreEqual (2, dc.derivedVal, "#N2");
900 public void DeserializeTwice ()
903 @"<any><_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC> <_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC></any>";
904 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
905 XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
906 xr.ReadStartElement ();
907 object o = ser.ReadObject (xr);
908 Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
909 ColorsWithDC cdc = (ColorsWithDC) o;
910 Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
912 o = ser.ReadObject (xr);
913 Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
914 cdc = (ColorsWithDC) o;
915 Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
916 Assert.AreEqual (XmlNodeType.EndElement, xr.NodeType, "#de6");
917 Assert.AreEqual ("any", xr.LocalName, "#de6");
918 xr.ReadEndElement ();
923 public void DeserializeEmptyNestingDC ()
925 NestingDC dc = Deserialize<NestingDC> (
926 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></NestingDC>");
928 Assert.IsNotNull (dc, "#A0: The object should not be null.");
929 Assert.IsNull (dc.Field1, "#A1: Field1 should be null.");
930 Assert.IsNull (dc.Field2, "#A2: Field2 should be null.");
932 dc = Deserialize<NestingDC> (
933 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
935 Assert.IsNotNull (dc, "#B0: The object should not be null.");
936 Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
937 Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
939 dc = Deserialize<NestingDC> (
940 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1 i:nil=""true"" /><Field2 i:nil=""true"" /></NestingDC>");
942 Assert.IsNotNull (dc, "#B0: The object should not be null.");
943 Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
944 Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
948 [ExpectedException (typeof (SerializationException))]
949 public void DeserializeEmptyDCWithTwoEnums ()
951 Deserialize<DCWithTwoEnums> (
952 @"<DCWithTwoEnums xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors i:nil=""true""/><colors2 i:nil=""true""/></DCWithTwoEnums>");
956 [Category ("NotWorking")]
957 public void DeserializeDCWithNullableEnum ()
959 DCWithNullableEnum dc = Deserialize<DCWithNullableEnum> (
960 @"<DCWithNullableEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors i:nil=""true""/></DCWithNullableEnum>");
962 Assert.IsNull (dc.colors, "#B1: Field should be null.");
966 public void DeserializeDCWithTwoEnums ()
968 DCWithTwoEnums dc = Deserialize<DCWithTwoEnums> (
969 @"<DCWithTwoEnums xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors>Blue</colors><colors2>Green</colors2></DCWithTwoEnums>");
971 Assert.AreEqual (Colors.Blue, dc.colors, "#0");
972 Assert.AreEqual (Colors.Green, dc.colors2, "#1");
976 public void DeserializerDCArray ()
978 DCWithEnum [] dcArray = Deserialize<DCWithEnum []> (
979 @"<ArrayOfDCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><DCWithEnum><_colors>Red</_colors></DCWithEnum><DCWithEnum><_colors>Green</_colors></DCWithEnum></ArrayOfDCWithEnum>");
981 Assert.AreEqual (2, dcArray.Length, "#N1");
982 Assert.AreEqual (Colors.Red, dcArray [0].colors, "#N2");
983 Assert.AreEqual (Colors.Green, dcArray [1].colors, "#N3");
987 public void DeserializerDCArray2 ()
990 @"<ArrayOfanyType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCWithEnum""><d2p1:_colors>Red</d2p1:_colors></anyType><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCSimple1""><d2p1:Foo>hello</d2p1:Foo></anyType></ArrayOfanyType>";
992 List<Type> known = new List<Type> ();
993 known.Add (typeof (DCWithEnum));
994 known.Add (typeof (DCSimple1));
995 DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
996 XmlReader xr = XmlReader.Create (new StringReader (xml));
998 object [] dc = (object []) ser.ReadObject (xr);
999 Assert.AreEqual (2, dc.Length, "#N1");
1000 Assert.AreEqual (typeof (DCWithEnum), dc [0].GetType (), "#N2");
1001 DCWithEnum dc0 = (DCWithEnum) dc [0];
1002 Assert.AreEqual (Colors.Red, dc0.colors, "#N3");
1003 Assert.AreEqual (typeof (DCSimple1), dc [1].GetType (), "#N4");
1004 DCSimple1 dc1 = (DCSimple1) dc [1];
1005 Assert.AreEqual ("hello", dc1.Foo, "#N4");
1009 public void DeserializerDCArray3 ()
1011 int [] intArray = Deserialize<int []> (
1012 @"<ArrayOfint xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><int>1</int><int>2</int></ArrayOfint>");
1014 Assert.AreEqual (2, intArray.Length, "#N0");
1015 Assert.AreEqual (1, intArray [0], "#N1");
1016 Assert.AreEqual (2, intArray [1], "#N2");
1020 public void ReadObjectNoVerifyObjectName ()
1022 string xml = @"<any><Member1 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization1"">bar1</Member1><Member1 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization2"">bar2</Member1><Member1 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">bar</Member1></any>";
1023 VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
1024 .ReadObject (XmlReader.Create (new StringReader (xml)), false);
1025 Assert.AreEqual ("bar", res.GetMember());
1029 public void ReadObjectVerifyObjectName ()
1031 string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Member1>bar</Member1></VerifyObjectNameTestData>";
1032 VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
1033 .ReadObject (XmlReader.Create (new StringReader (xml)));
1034 Assert.AreEqual ("bar", res.GetMember());
1038 [ExpectedException (typeof (SerializationException))]
1039 public void ReadObjectWrongNamespace ()
1041 string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization2""><Member1>bar</Member1></VerifyObjectNameTestData>";
1042 new DataContractSerializer (typeof (VerifyObjectNameTestData))
1043 .ReadObject (XmlReader.Create (new StringReader (xml)));
1047 public void ReferenceSerialization ()
1049 var dc = new DataContractSerializer (typeof (ReferenceWrapper));
1050 var t = new ReferenceType ();
1051 StringWriter sw = new StringWriter ();
1052 using (var xw = XmlWriter.Create (sw)) {
1053 xw.WriteStartElement ("z", "root", "http://schemas.microsoft.com/2003/10/Serialization/");
1054 dc.WriteObject (xw, new ReferenceWrapper () {T = t, T2 = t});
1055 xw.WriteEndElement ();
1057 string xml = @"<?xml version='1.0' encoding='utf-16'?><z:root xmlns:z='http://schemas.microsoft.com/2003/10/Serialization/'><ReferenceWrapper xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><T z:Id='i1'><F>x</F></T><T2 z:Ref='i1' /></ReferenceWrapper></z:root>";
1058 Assert.AreEqual (xml.Replace ('\'', '"'), sw.ToString (), "#1");
1061 using (XmlReader r = XmlReader.Create (new StringReader (xml)))
1063 r.ReadStartElement ();
1064 w = (ReferenceWrapper) dc.ReadObject (r);
1065 r.ReadEndElement ();
1067 Assert.AreEqual (w.T, w.T2, "#2");
1071 public void GenericSerialization ()
1073 var sw = new StringWriter ();
1074 var ser = new DataContractSerializer (typeof (Foo<string,int,int>));
1075 using (var xw = XmlWriter.Create (sw))
1076 ser.WriteObject (xw, new Foo<string,int,int> () {Field = "f"
1078 var s = sw.ToString ();
1080 var ret = (Foo<string,int,int>) ser.ReadObject (XmlReader.Create (new StringReader (s)));
1081 Assert.AreEqual ("f", ret.Field);
1085 public void GenericCollectionSerialization ()
1087 var l = new MyList ();
1090 var ds = new DataContractSerializer (typeof (MyList));
1091 var sw = new StringWriter ();
1092 using (var xw = XmlWriter.Create (sw))
1093 ds.WriteObject (xw, l);
1094 l = (MyList) ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ())));
1095 Assert.AreEqual (2, l.Count);
1099 public void GenericListOfKeyValuePairSerialization ()
1101 string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfKeyValuePairOfstringstring xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System.Collections.Generic'><KeyValuePairOfstringstring><key>foo</key><value>bar</value></KeyValuePairOfstringstring></ArrayOfKeyValuePairOfstringstring>".Replace ('\'', '"');
1103 var ds = new DataContractSerializer (typeof (List<KeyValuePair<string,string>>));
1104 var d = new List<KeyValuePair<string,string>> ();
1105 //d ["foo"] = "bar";
1106 //d.Add (new DictionaryEntry ("foo", "bar"));
1107 d.Add (new KeyValuePair<string,string> ("foo", "bar"));
1108 var sw = new StringWriter ();
1109 using (var xw = XmlWriter.Create (sw))
1110 ds.WriteObject (xw, d);
1111 Assert.AreEqual (xml, sw.ToString (), "#1");
1112 d = (List<KeyValuePair<string,string>>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1113 //Console.WriteLine ("{0}: {1}", d.Count, d ["foo"]);
1114 Console.WriteLine ("{0}: {1}", d.Count, d [0].Value);
1115 Assert.AreEqual (1, d.Count, "#2");
1116 Assert.AreEqual ("bar", d [0].Value);
1120 public void GenericListOfDictionaryEntrySerialization ()
1122 string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfDictionaryEntry xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System.Collections'><DictionaryEntry><_key xmlns:d3p1='http://www.w3.org/2001/XMLSchema' i:type='d3p1:string'>foo</_key><_value xmlns:d3p1='http://www.w3.org/2001/XMLSchema' i:type='d3p1:string'>bar</_value></DictionaryEntry></ArrayOfDictionaryEntry>".Replace ('\'', '"');
1124 var ds = new DataContractSerializer (typeof (List<DictionaryEntry>));
1125 var d = new List<DictionaryEntry> ();
1126 d.Add (new DictionaryEntry ("foo", "bar"));
1127 var sw = new StringWriter ();
1128 using (var xw = XmlWriter.Create (sw))
1129 ds.WriteObject (xw, d);
1130 Assert.AreEqual (xml, sw.ToString (), "#1");
1131 Assert.IsTrue (sw.ToString ().IndexOf ("i:type") >= 0);
1132 d = (List<DictionaryEntry>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1133 Assert.AreEqual (1, d.Count, "#2");
1134 Assert.AreEqual ("bar", d [0].Value);
1137 private T Deserialize<T> (string xml)
1139 return Deserialize<T> (xml, typeof (T));
1142 private T Deserialize<T> (string xml, Type runtimeType)
1144 DataContractSerializer ser = new DataContractSerializer (typeof (T));
1145 XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
1146 object o = ser.ReadObject (xr);
1147 Assert.AreEqual (runtimeType, o.GetType (), "#DS0");
1152 public enum Colors {
1156 [DataContract (Name = "_ColorsWithDC")]
1157 public enum ColorsWithDC {
1159 [EnumMember (Value = "_Red")]
1167 public enum ColorsEnumMemberNoDC {
1168 [EnumMember (Value = "_Red")]
1176 public class DCWithEnum {
1177 [DataMember (Name = "_colors")]
1178 public Colors colors;
1182 public class DCWithTwoEnums {
1184 public Colors colors;
1186 public Colors colors2;
1190 public class DCWithNullableEnum {
1192 public Colors? colors;
1196 [DataContract (Namespace = "Base")]
1197 public class BaseDC {
1202 [DataContract (Namespace = "Derived")]
1203 public class DerivedDC : BaseDC {
1205 public int derivedVal;
1209 public class NestedDC {
1210 public NestedDC (string name) { this.Name = name; }
1217 public class NestingDC {
1219 public NestedDC Field1;
1221 public NestedDC Field2;
1224 [DataContract (Namespace = "test1")]
1225 public class NestedDC2 {
1226 public NestedDC2 (string name) { this.Name = name; }
1232 [DataContract (Namespace = "test2")]
1233 public class NestingDC2 {
1235 public NestedDC2 Field;
1239 public class DCEmpty
1241 // serializer doesn't touch it.
1242 public string Foo = "TEST";
1246 public class DCSimple1
1249 public string Foo = "TEST";
1253 public class DCHasNonDC
1256 public NonDC Hoge= new NonDC ();
1261 public string Whee = "whee!";
1265 public class DCHasSerializable
1268 public SimpleSer1 Ser = new SimpleSer1 ();
1271 [DataContract (Name = "Foo")]
1272 public class DCWithName
1274 [DataMember (Name = "FooMember")]
1275 public string DMWithName = "value";
1278 [DataContract (Name = "")]
1279 public class DCWithEmptyName
1283 [DataContract (Name = null)]
1284 public class DCWithNullName
1288 [DataContract (Namespace = "")]
1289 public class DCWithEmptyNamespace
1294 public class SimpleSer1
1296 public string Doh = "doh!";
1298 public string Bah = "bah!";
1301 public class Wrapper
1304 public class DCWrapped
1310 public class CollectionContainer
1312 Collection<string> items = new Collection<string> ();
1315 public Collection<string> Items {
1316 get { return items; }
1320 [CollectionDataContract]
1321 public class DataCollection<T> : Collection<T>
1326 public class DataCollectionContainer
1328 DataCollection<string> items = new DataCollection<string> ();
1331 public DataCollection<string> Items {
1332 get { return items; }
1337 class SerializeNonDCArrayType
1340 public IPAddress [] IPAddresses = new IPAddress [0];
1344 public class VerifyObjectNameTestData
1347 string Member1 = "foo";
1349 public string GetMember() { return Member1; }
1352 [XmlRoot(ElementName = "simple", Namespace = "")]
1353 public class SimpleXml : IXmlSerializable
1355 void IXmlSerializable.ReadXml (XmlReader reader)
1359 void IXmlSerializable.WriteXml (XmlWriter writer)
1363 XmlSchema IXmlSerializable.GetSchema ()
1371 public class ReferenceWrapper
1373 [DataMember (Order = 1)]
1374 public ReferenceType T;
1376 [DataMember (Order = 2)]
1377 public ReferenceType T2;
1380 [DataContract (IsReference = true)]
1381 public class ReferenceType
1384 public string F = "x";
1387 public class MyList : IList<string>
1389 List<string> l = new List<string> ();
1390 public void Clear () { l.Clear (); }
1391 public void Add(string s) { l.Add (s);}
1392 public void Insert(int idx, string s) { l.Insert(idx,s);}
1393 public bool Contains(string s) { return l.Contains(s); }
1394 public IEnumerator<string> GetEnumerator () { return l.GetEnumerator (); }
1395 IEnumerator IEnumerable.GetEnumerator () { return l.GetEnumerator (); }
1396 public bool Remove(string s) { return l.Remove(s); }
1397 public void RemoveAt(int i) { l.RemoveAt (i);}
1398 public void CopyTo (string [] arr, int index) { l.CopyTo (arr, index);}
1399 public int IndexOf (string s) { return l.IndexOf (s); }
1401 public int Count { get { return l.Count; } }
1402 public bool IsReadOnly { get { return ((IList<string>) l).IsReadOnly; } }
1403 public string this [int index] { get { return l [index]; } set { l [index] = value; } }