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 ());
233 public void SerializeEmptyNoNSClass ()
235 var ser = new DataContractSerializer (typeof (DCEmptyNoNS));
236 SerializeEmptyNoNSClass (ser, "<DCEmptyNoNS xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" />");
239 void SerializeEmptyNoNSClass (XmlObjectSerializer ser, string expected)
241 var sw = new StringWriter ();
242 using (var w = XmlWriter.Create (sw, settings)) {
243 ser.WriteObject (w, new DCEmptyNoNS ());
245 Assert.AreEqual (expected, sw.ToString ());
247 // string (primitive)
250 public void SerializePrimitiveString ()
252 XmlObjectSerializer ser =
253 new DataContractSerializer (typeof (string));
254 SerializePrimitiveString (ser, "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">TEST</string>");
258 [Category ("NotWorking")]
259 public void NetSerializePrimitiveString ()
261 XmlObjectSerializer ser = new NetDataContractSerializer ();
262 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>");
265 void SerializePrimitiveString (XmlObjectSerializer ser, string expected)
267 StringWriter sw = new StringWriter ();
268 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
269 ser.WriteObject (w, "TEST");
271 Assert.AreEqual (expected, sw.ToString ());
274 // QName (primitive but ...)
277 [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
278 public void SerializePrimitiveQName ()
280 XmlObjectSerializer ser =
281 new DataContractSerializer (typeof (XmlQualifiedName));
282 SerializePrimitiveQName (ser, "<z:QName xmlns:d7=\"urn:foo\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\">d7:foo</z:QName>");
286 [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
287 public void NetSerializePrimitiveQName ()
289 XmlObjectSerializer ser = new NetDataContractSerializer ();
290 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>");
293 void SerializePrimitiveQName (XmlObjectSerializer ser, string expected)
295 StringWriter sw = new StringWriter ();
296 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
297 ser.WriteObject (w, new XmlQualifiedName ("foo", "urn:foo"));
299 Assert.AreEqual (expected, sw.ToString ());
305 public void SerializeSimpleClass1 ()
307 DataContractSerializer ser =
308 new DataContractSerializer (typeof (DCSimple1));
309 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>");
313 [ExpectedException (typeof (SerializationException))]
314 [Category ("NotWorking")] // behavior changed in 3.5/SP1
315 public void SerializeSimpleXml ()
317 DataContractSerializer ser =
318 new DataContractSerializer (typeof (SimpleXml));
319 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>");
323 [Category ("NotWorking")]
324 public void NetSerializeSimpleClass1 ()
326 NetDataContractSerializer ser =
327 new NetDataContractSerializer ();
328 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));
331 void SerializeSimpleClass1 (XmlObjectSerializer ser, string expected)
333 StringWriter sw = new StringWriter ();
334 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
335 ser.WriteObject (w, new DCSimple1 ());
337 Console.WriteLine(sw.ToString());
338 Assert.AreEqual (expected, sw.ToString ());
341 // NonDC (behavior changed in 3.5/SP1; not it's not rejected)
344 public void SerializeNonDC ()
346 DataContractSerializer ser = new DataContractSerializer (typeof (NonDC));
347 var sw = new StringWriter ();
348 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
349 ser.WriteObject (w, new NonDC ());
351 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 ());
357 public void SerializeDCHasNonDC ()
359 DataContractSerializer ser = new DataContractSerializer (typeof (DCHasNonDC));
360 var sw = new StringWriter ();
361 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
362 ser.WriteObject (w, new DCHasNonDC ());
364 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 ());
370 // DCHasSerializable itself is DataContract and has a field
371 // whose type is not contract but serializable.
372 public void SerializeSimpleSerializable1 ()
374 DataContractSerializer ser = new DataContractSerializer (typeof (DCHasSerializable));
375 StringWriter sw = new StringWriter ();
376 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
377 ser.WriteObject (w, new DCHasSerializable ());
379 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 ());
383 public void SerializeDCWithName ()
385 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
386 StringWriter sw = new StringWriter ();
387 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
388 ser.WriteObject (w, new DCWithName ());
390 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 ());
394 public void SerializeDCWithEmptyName1 ()
396 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyName));
397 StringWriter sw = new StringWriter ();
398 DCWithEmptyName dc = new DCWithEmptyName ();
399 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
401 ser.WriteObject (w, dc);
402 } catch (InvalidDataContractException) {
406 Assert.Fail ("Expected InvalidDataContractException");
410 [Category ("NotWorking")]
411 public void SerializeDCWithEmptyName2 ()
413 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
414 StringWriter sw = new StringWriter ();
416 /* DataContractAttribute.Name == "", not valid */
417 DCWithEmptyName dc = new DCWithEmptyName ();
418 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
420 ser.WriteObject (w, dc);
421 } catch (InvalidDataContractException) {
425 Assert.Fail ("Expected InvalidDataContractException");
429 [Category ("NotWorking")]
430 public void SerializeDCWithNullName ()
432 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithNullName));
433 StringWriter sw = new StringWriter ();
434 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
436 /* DataContractAttribute.Name == "", not valid */
437 ser.WriteObject (w, new DCWithNullName ());
438 } catch (InvalidDataContractException) {
442 Assert.Fail ("Expected InvalidDataContractException");
446 public void SerializeDCWithEmptyNamespace1 ()
448 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyNamespace));
449 StringWriter sw = new StringWriter ();
450 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
451 ser.WriteObject (w, new DCWithEmptyNamespace ());
458 public void SerializeWrappedClass ()
460 DataContractSerializer ser =
461 new DataContractSerializer (typeof (Wrapper.DCWrapped));
462 SerializeWrappedClass (ser, "<Wrapper.DCWrapped xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
466 [Category ("NotWorking")]
467 public void NetSerializeWrappedClass ()
469 NetDataContractSerializer ser =
470 new NetDataContractSerializer ();
471 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));
474 void SerializeWrappedClass (XmlObjectSerializer ser, string expected)
476 StringWriter sw = new StringWriter ();
477 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
478 ser.WriteObject (w, new Wrapper.DCWrapped ());
480 Assert.AreEqual (expected, sw.ToString ());
485 // CollectionContainer : Items must have a setter.
486 [ExpectedException (typeof (InvalidDataContractException))]
487 [Category ("NotWorking")]
489 public void SerializeReadOnlyCollectionMember ()
491 DataContractSerializer ser =
492 new DataContractSerializer (typeof (CollectionContainer));
494 StringWriter sw = new StringWriter ();
495 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
496 ser.WriteObject (w, null);
498 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");
500 sw = new StringWriter ();
501 var c = new CollectionContainer ();
504 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
505 ser.WriteObject (w, c);
507 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");
510 // DataCollectionContainer : Items must have a setter.
512 //[ExpectedException (typeof (InvalidDataContractException))]
513 public void SerializeReadOnlyDataCollectionMember ()
515 DataContractSerializer ser =
516 new DataContractSerializer (typeof (DataCollectionContainer));
517 StringWriter sw = new StringWriter ();
518 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
519 ser.WriteObject (w, null);
521 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");
523 sw = new StringWriter ();
524 var c = new DataCollectionContainer ();
527 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
528 ser.WriteObject (w, c);
530 // LAMESPEC: this is bogus behavior. .NET serializes
531 // System.String as "string" without overriding its
532 // element namespace, but then it must be regarded as
533 // in parent's namespace. What if there already is an
534 // element definition for "string" with the same
536 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");
540 public void SerializeGuid ()
542 DataContractSerializer ser = new DataContractSerializer (typeof (Guid));
543 StringWriter sw = new StringWriter ();
544 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
545 ser.WriteObject (w, Guid.Empty);
548 "<guid xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">00000000-0000-0000-0000-000000000000</guid>",
553 public void SerializeEnum ()
555 DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
556 StringWriter sw = new StringWriter ();
557 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
558 ser.WriteObject (w, new Colors ());
562 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>",
567 public void SerializeEnum2 ()
569 DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
570 StringWriter sw = new StringWriter ();
571 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
572 ser.WriteObject (w, 0);
575 XmlComparer.AssertAreEqual (
576 @"<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>",
581 public void SerializeEnumWithDC ()
583 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
584 StringWriter sw = new StringWriter ();
585 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
586 ser.WriteObject (w, new ColorsWithDC ());
590 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>",
595 public void SerializeEnumWithNoDC ()
597 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsEnumMemberNoDC));
598 StringWriter sw = new StringWriter ();
599 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
600 ser.WriteObject (w, new ColorsEnumMemberNoDC ());
604 @"<ColorsEnumMemberNoDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</ColorsEnumMemberNoDC>",
609 public void SerializeEnumWithDC2 ()
611 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
612 StringWriter sw = new StringWriter ();
613 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
614 ser.WriteObject (w, 3);
617 XmlComparer.AssertAreEqual (
618 @"<_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>",
623 [ExpectedException (typeof (SerializationException))]
624 public void SerializeEnumWithDCInvalid ()
626 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
627 StringWriter sw = new StringWriter ();
628 ColorsWithDC cdc = ColorsWithDC.Blue;
629 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
630 ser.WriteObject (w, cdc);
635 public void SerializeDCWithEnum ()
637 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum));
638 StringWriter sw = new StringWriter ();
639 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
640 ser.WriteObject (w, new DCWithEnum ());
644 @"<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>",
649 public void SerializeDCWithTwoEnums ()
651 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithTwoEnums));
652 StringWriter sw = new StringWriter ();
653 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
654 DCWithTwoEnums e = new DCWithTwoEnums ();
655 e.colors = Colors.Blue;
656 e.colors2 = Colors.Green;
657 ser.WriteObject (w, e);
661 @"<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>",
666 public void SerializeNestingDC2 ()
668 DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC2));
669 StringWriter sw = new StringWriter ();
670 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
671 NestingDC2 e = new NestingDC2 ();
672 e.Field = new NestedDC2 ("Something");
673 ser.WriteObject (w, e);
677 @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>",
682 public void SerializeNestingDC ()
684 DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC));
685 StringWriter sw = new StringWriter ();
686 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
687 NestingDC e = new NestingDC ();
688 e.Field1 = new NestedDC ("test1");
689 e.Field2 = new NestedDC ("test2");
690 ser.WriteObject (w, e);
694 @"<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>",
696 sw = new StringWriter ();
697 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
698 NestingDC e = new NestingDC ();
699 ser.WriteObject (w, e);
703 @"<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>",
708 public void SerializeDerivedDC ()
710 DataContractSerializer ser = new DataContractSerializer (typeof (DerivedDC));
711 StringWriter sw = new StringWriter ();
712 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
713 DerivedDC e = new DerivedDC ();
714 ser.WriteObject (w, e);
718 @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">0</baseVal><derivedVal>0</derivedVal></DerivedDC>",
723 public void SerializerDCArray ()
725 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum []));
726 StringWriter sw = new StringWriter ();
727 DCWithEnum [] arr = new DCWithEnum [2];
728 arr [0] = new DCWithEnum (); arr [0].colors = Colors.Red;
729 arr [1] = new DCWithEnum (); arr [1].colors = Colors.Green;
730 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
731 ser.WriteObject (w, arr);
734 XmlComparer.AssertAreEqual (
735 @"<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>",
740 public void SerializerDCArray2 ()
742 List<Type> known = new List<Type> ();
743 known.Add (typeof (DCWithEnum));
744 known.Add (typeof (DCSimple1));
745 DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
746 StringWriter sw = new StringWriter ();
747 object [] arr = new object [2];
748 arr [0] = new DCWithEnum (); ((DCWithEnum)arr [0]).colors = Colors.Red;
749 arr [1] = new DCSimple1 (); ((DCSimple1) arr [1]).Foo = "hello";
751 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
752 ser.WriteObject (w, arr);
755 XmlComparer.AssertAreEqual (
756 @"<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>",
761 public void SerializerDCArray3 ()
763 DataContractSerializer ser = new DataContractSerializer (typeof (int []));
764 StringWriter sw = new StringWriter ();
765 int [] arr = new int [2];
766 arr [0] = 1; arr [1] = 2;
768 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
769 ser.WriteObject (w, arr);
772 XmlComparer.AssertAreEqual (
773 @"<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>",
778 public void SerializeNonDCArray ()
780 DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
781 StringWriter sw = new StringWriter ();
782 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
783 ser.WriteObject (xw, new SerializeNonDCArrayType ());
785 Assert.AreEqual (@"<SerializeNonDCArrayType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><IPAddresses /></SerializeNonDCArrayType>",
790 public void SerializeNonDCArrayItems ()
792 DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
793 StringWriter sw = new StringWriter ();
794 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
795 SerializeNonDCArrayType obj = new SerializeNonDCArrayType ();
796 obj.IPAddresses = new NonDCItem [] {new NonDCItem () { Data = new int [] {1, 2, 3, 4} } };
797 ser.WriteObject (xw, obj);
800 XmlDocument doc = new XmlDocument ();
801 doc.LoadXml (sw.ToString ());
802 XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
803 nsmgr.AddNamespace ("s", "http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization");
804 nsmgr.AddNamespace ("n", "http://schemas.datacontract.org/2004/07/System.Net");
805 nsmgr.AddNamespace ("a", "http://schemas.microsoft.com/2003/10/Serialization/Arrays");
807 Assert.AreEqual (1, doc.SelectNodes ("/s:SerializeNonDCArrayType/s:IPAddresses/s:NonDCItem", nsmgr).Count, "#1");
808 XmlElement el = doc.SelectSingleNode ("/s:SerializeNonDCArrayType/s:IPAddresses/s:NonDCItem/s:Data", nsmgr) as XmlElement;
809 Assert.IsNotNull (el, "#3");
810 Assert.AreEqual (4, el.SelectNodes ("a:int", nsmgr).Count, "#4");
814 public void DeserializeEnum ()
816 Colors c = Deserialize<Colors> (
817 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>");
819 Assert.AreEqual (Colors.Red, c, "#de2");
823 public void DeserializeEnum2 ()
825 Colors c = Deserialize<Colors> (
826 @"<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>",
829 Assert.AreEqual (Colors.Green, c, "#de4");
833 [ExpectedException (typeof (SerializationException))]
834 public void DeserializeEnumInvalid1 ()
836 Deserialize<Colors> (
837 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></Colors>");
841 [ExpectedException (typeof (SerializationException))]
842 public void DeserializeEnumInvalid2 ()
844 Deserialize<Colors> (
845 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
849 [ExpectedException (typeof (SerializationException))]
850 public void DeserializeEnumInvalid3 ()
852 //"red" instead of "Red"
853 Deserialize<Colors> (
854 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">red</Colors>");
858 public void DeserializeEnumFlags ()
860 Deserialize<Colors2> (
861 @"<Colors2 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
865 public void DeserializeEnumWithDC ()
867 ColorsWithDC cdc = Deserialize<ColorsWithDC> (
868 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>");
870 Assert.AreEqual (ColorsWithDC.Red, cdc, "#de6");
874 [ExpectedException (typeof (SerializationException))]
875 public void DeserializeEnumWithDCInvalid ()
877 Deserialize<ColorsWithDC> (
878 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">NonExistant</_ColorsWithDC>");
882 public void DeserializeDCWithEnum ()
884 DCWithEnum dc = Deserialize<DCWithEnum> (
885 @"<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>");
887 Assert.AreEqual (Colors.Red, dc.colors, "#de8");
891 public void DeserializeNestingDC ()
893 NestingDC dc = Deserialize<NestingDC> (
894 @"<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>");
896 Assert.IsNotNull (dc.Field1, "#N1: Field1 should not be null.");
897 Assert.IsNotNull (dc.Field2, "#N2: Field2 should not be null.");
898 Assert.AreEqual ("test1", dc.Field1.Name, "#1");
899 Assert.AreEqual ("test2", dc.Field2.Name, "#2");
903 public void DeserializeNestingDC2 ()
905 NestingDC2 dc = Deserialize<NestingDC2> (
906 @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>");
908 Assert.IsNotNull (dc.Field, "#N1: Field should not be null.");
909 Assert.AreEqual ("Something", dc.Field.Name, "#N2");
913 public void DeserializeDerivedDC ()
915 DerivedDC dc = Deserialize<DerivedDC> (
916 @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">1</baseVal><derivedVal>2</derivedVal></DerivedDC>");
918 Assert.AreEqual (1, dc.baseVal, "#N1");
919 Assert.AreEqual (2, dc.derivedVal, "#N2");
923 public void DeserializeTwice ()
926 @"<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>";
927 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
928 XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
929 xr.ReadStartElement ();
930 object o = ser.ReadObject (xr);
931 Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
932 ColorsWithDC cdc = (ColorsWithDC) o;
933 Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
935 o = ser.ReadObject (xr);
936 Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
937 cdc = (ColorsWithDC) o;
938 Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
939 Assert.AreEqual (XmlNodeType.EndElement, xr.NodeType, "#de6");
940 Assert.AreEqual ("any", xr.LocalName, "#de6");
941 xr.ReadEndElement ();
946 public void DeserializeEmptyNestingDC ()
948 NestingDC dc = Deserialize<NestingDC> (
949 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></NestingDC>");
951 Assert.IsNotNull (dc, "#A0: The object should not be null.");
952 Assert.IsNull (dc.Field1, "#A1: Field1 should be null.");
953 Assert.IsNull (dc.Field2, "#A2: Field2 should be null.");
955 dc = Deserialize<NestingDC> (
956 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
958 Assert.IsNotNull (dc, "#B0: The object should not be null.");
959 Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
960 Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
962 dc = Deserialize<NestingDC> (
963 @"<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>");
965 Assert.IsNotNull (dc, "#B0: The object should not be null.");
966 Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
967 Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
971 [ExpectedException (typeof (SerializationException))]
972 public void DeserializeEmptyDCWithTwoEnums ()
974 Deserialize<DCWithTwoEnums> (
975 @"<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>");
979 [Category ("NotWorking")]
980 public void DeserializeDCWithNullableEnum ()
982 DCWithNullableEnum dc = Deserialize<DCWithNullableEnum> (
983 @"<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>");
985 Assert.IsNull (dc.colors, "#B1: Field should be null.");
989 public void DeserializeDCWithTwoEnums ()
991 DCWithTwoEnums dc = Deserialize<DCWithTwoEnums> (
992 @"<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>");
994 Assert.AreEqual (Colors.Blue, dc.colors, "#0");
995 Assert.AreEqual (Colors.Green, dc.colors2, "#1");
999 public void DeserializerDCArray ()
1001 DCWithEnum [] dcArray = Deserialize<DCWithEnum []> (
1002 @"<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>");
1004 Assert.AreEqual (2, dcArray.Length, "#N1");
1005 Assert.AreEqual (Colors.Red, dcArray [0].colors, "#N2");
1006 Assert.AreEqual (Colors.Green, dcArray [1].colors, "#N3");
1010 public void DeserializerDCArray2 ()
1013 @"<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>";
1015 List<Type> known = new List<Type> ();
1016 known.Add (typeof (DCWithEnum));
1017 known.Add (typeof (DCSimple1));
1018 DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
1019 XmlReader xr = XmlReader.Create (new StringReader (xml));
1021 object [] dc = (object []) ser.ReadObject (xr);
1022 Assert.AreEqual (2, dc.Length, "#N1");
1023 Assert.AreEqual (typeof (DCWithEnum), dc [0].GetType (), "#N2");
1024 DCWithEnum dc0 = (DCWithEnum) dc [0];
1025 Assert.AreEqual (Colors.Red, dc0.colors, "#N3");
1026 Assert.AreEqual (typeof (DCSimple1), dc [1].GetType (), "#N4");
1027 DCSimple1 dc1 = (DCSimple1) dc [1];
1028 Assert.AreEqual ("hello", dc1.Foo, "#N4");
1032 public void DeserializerDCArray3 ()
1034 int [] intArray = Deserialize<int []> (
1035 @"<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>");
1037 Assert.AreEqual (2, intArray.Length, "#N0");
1038 Assert.AreEqual (1, intArray [0], "#N1");
1039 Assert.AreEqual (2, intArray [1], "#N2");
1043 public void ReadObjectNoVerifyObjectName ()
1045 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>";
1046 VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
1047 .ReadObject (XmlReader.Create (new StringReader (xml)), false);
1048 Assert.AreEqual ("bar", res.GetMember());
1052 public void ReadObjectVerifyObjectName ()
1054 string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Member1>bar</Member1></VerifyObjectNameTestData>";
1055 VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
1056 .ReadObject (XmlReader.Create (new StringReader (xml)));
1057 Assert.AreEqual ("bar", res.GetMember());
1061 [ExpectedException (typeof (SerializationException))]
1062 public void ReadObjectWrongNamespace ()
1064 string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization2""><Member1>bar</Member1></VerifyObjectNameTestData>";
1065 new DataContractSerializer (typeof (VerifyObjectNameTestData))
1066 .ReadObject (XmlReader.Create (new StringReader (xml)));
1070 public void ReferenceSerialization ()
1072 var dc = new DataContractSerializer (typeof (ReferenceWrapper));
1073 var t = new ReferenceType ();
1074 StringWriter sw = new StringWriter ();
1075 using (var xw = XmlWriter.Create (sw)) {
1076 xw.WriteStartElement ("z", "root", "http://schemas.microsoft.com/2003/10/Serialization/");
1077 dc.WriteObject (xw, new ReferenceWrapper () {T = t, T2 = t});
1078 xw.WriteEndElement ();
1080 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>";
1081 Assert.AreEqual (xml.Replace ('\'', '"'), sw.ToString (), "#1");
1084 using (XmlReader r = XmlReader.Create (new StringReader (xml)))
1086 r.ReadStartElement ();
1087 w = (ReferenceWrapper) dc.ReadObject (r);
1088 r.ReadEndElement ();
1090 Assert.AreEqual (w.T, w.T2, "#2");
1094 public void GenericSerialization ()
1096 var sw = new StringWriter ();
1097 var ser = new DataContractSerializer (typeof (Foo<string,int,int>));
1098 using (var xw = XmlWriter.Create (sw))
1099 ser.WriteObject (xw, new Foo<string,int,int> () {Field = "f"
1101 var s = sw.ToString ();
1103 var ret = (Foo<string,int,int>) ser.ReadObject (XmlReader.Create (new StringReader (s)));
1104 Assert.AreEqual ("f", ret.Field);
1108 public void GenericCollectionSerialization ()
1110 var l = new MyList ();
1113 var ds = new DataContractSerializer (typeof (MyList));
1114 var sw = new StringWriter ();
1115 using (var xw = XmlWriter.Create (sw))
1116 ds.WriteObject (xw, l);
1117 l = (MyList) ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ())));
1118 Assert.AreEqual (2, l.Count);
1122 public void GenericListOfKeyValuePairSerialization ()
1124 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 ('\'', '"');
1126 var ds = new DataContractSerializer (typeof (List<KeyValuePair<string,string>>));
1127 var d = new List<KeyValuePair<string,string>> ();
1128 d.Add (new KeyValuePair<string,string> ("foo", "bar"));
1129 var sw = new StringWriter ();
1130 using (var xw = XmlWriter.Create (sw))
1131 ds.WriteObject (xw, d);
1132 Assert.AreEqual (xml, sw.ToString (), "#1");
1133 d = (List<KeyValuePair<string,string>>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1134 Assert.AreEqual (1, d.Count, "#2");
1135 Assert.AreEqual ("bar", d [0].Value, "#3");
1139 public void GenericListOfDictionaryEntrySerialization ()
1141 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 ('\'', '"');
1143 var ds = new DataContractSerializer (typeof (List<DictionaryEntry>));
1144 var d = new List<DictionaryEntry> ();
1145 d.Add (new DictionaryEntry ("foo", "bar"));
1146 var sw = new StringWriter ();
1147 using (var xw = XmlWriter.Create (sw))
1148 ds.WriteObject (xw, d);
1149 Assert.AreEqual (xml, sw.ToString (), "#1");
1150 Assert.IsTrue (sw.ToString ().IndexOf ("i:type") >= 0);
1151 d = (List<DictionaryEntry>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1152 Assert.AreEqual (1, d.Count, "#2");
1153 Assert.AreEqual ("bar", d [0].Value, "#3");
1157 public void GenericDictionarySerialization ()
1159 string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfKeyValueOfstringstring xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><KeyValueOfstringstring><Key>foo</Key><Value>bar</Value></KeyValueOfstringstring></ArrayOfKeyValueOfstringstring>".Replace ('\'', '"');
1161 var ds = new DataContractSerializer (typeof (Dictionary<string,string>));
1162 var d = new Dictionary<string,string> ();
1164 var sw = new StringWriter ();
1165 using (var xw = XmlWriter.Create (sw))
1166 ds.WriteObject (xw, d);
1167 Assert.AreEqual (xml, sw.ToString (), "#1");
1168 d = (Dictionary<string,string>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1169 Assert.AreEqual (1, d.Count, "#2");
1170 Assert.AreEqual ("bar", d ["foo"], "#3");
1174 public void HashtableSerialization ()
1176 string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfKeyValueOfanyTypeanyType xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><KeyValueOfanyTypeanyType><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></KeyValueOfanyTypeanyType></ArrayOfKeyValueOfanyTypeanyType>".Replace ('\'', '"');
1178 var ds = new DataContractSerializer (typeof (Hashtable));
1179 var d = new Hashtable ();
1181 var sw = new StringWriter ();
1182 using (var xw = XmlWriter.Create (sw))
1183 ds.WriteObject (xw, d);
1184 Assert.AreEqual (xml, sw.ToString (), "#1");
1185 d = (Hashtable) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1186 Assert.AreEqual (1, d.Count, "#2");
1187 Assert.AreEqual ("bar", d ["foo"], "#3");
1191 public void CollectionContarctDictionarySerialization ()
1193 string xml = @"<?xml version='1.0' encoding='utf-16'?><NAME xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='urn:foo'><ITEM><KEY>foo</KEY><VALUE>bar</VALUE></ITEM></NAME>".Replace ('\'', '"');
1195 var ds = new DataContractSerializer (typeof (MyDictionary<string,string>));
1196 var d = new MyDictionary<string,string> ();
1198 var sw = new StringWriter ();
1199 using (var xw = XmlWriter.Create (sw))
1200 ds.WriteObject (xw, d);
1201 Assert.AreEqual (xml, sw.ToString (), "#1");
1202 d = (MyDictionary<string,string>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1203 Assert.AreEqual (1, d.Count, "#2");
1204 Assert.AreEqual ("bar", d ["foo"], "#3");
1208 public void SerializeInterfaceCollection ()
1210 var ser = new DataContractSerializer (typeof (InterfaceCollectionType));
1211 var sw = new StringWriter ();
1212 var obj = new InterfaceCollectionType ();
1213 using (var xw = XmlWriter.Create (sw))
1214 ser.WriteObject (xw, obj);
1215 using (var xr = XmlReader.Create (new StringReader (sw.ToString ()))) {
1216 obj = (InterfaceCollectionType) ser.ReadObject (xr);
1217 Assert.IsNull (obj.Array, "#1");
1220 sw = new StringWriter ();
1221 obj.Array = new List<int> ();
1223 using (var xw = XmlWriter.Create (sw))
1224 ser.WriteObject (xw, obj);
1225 using (var xr = XmlReader.Create (new StringReader (sw.ToString ()))) {
1226 obj = (InterfaceCollectionType) ser.ReadObject (xr);
1227 Assert.AreEqual (5, obj.Array [0], "#2");
1232 public void EmptyChildren ()
1235 <DummyPlaylist xmlns='http://example.com/schemas/asx'>
1238 <EntryInfo xmlns:i='http://www.w3.org/2001/XMLSchema-instance' i:type='PartDummyEntryInfo'/>
1239 <Href>http://vmsservices.example.com:8080/VideoService.svc?crid=45541/part=1/guid=ae968b5d-e4a5-41fe-9b23-ed631b27cd21/</Href>
1244 var reader = XmlReader.Create (new StringReader (xml));
1245 DummyPlaylist playlist = (DummyPlaylist) new DataContractSerializer (typeof (DummyPlaylist)).ReadObject (reader);
1246 Assert.AreEqual (1, playlist.entries.Count, "#1");
1247 Assert.IsTrue (playlist.entries [0] is DummyEntry, "#2");
1248 Assert.IsNotNull (playlist.entries [0].Href, "#3");
1252 public void BaseKnownTypeAttributes ()
1256 <DummyPlaylist xmlns='http://example.com/schemas/asx'>
1259 <EntryInfo xmlns:i='http://www.w3.org/2001/XMLSchema-instance' i:type='PartDummyEntryInfo'/>
1264 using (XmlReader reader = XmlReader.Create (new StringReader (xml))) {
1265 DummyPlaylist playlist = new DataContractSerializer(typeof(DummyPlaylist)).ReadObject(reader) as DummyPlaylist;
1266 Assert.IsNotNull (playlist);
1271 public void Bug524083 ()
1274 <AsxEntryInfo xmlns='http://example.com/schemas/asx'>
1278 using (XmlReader reader = XmlReader.Create (new StringReader (xml)))
1279 new DataContractSerializer(typeof (AsxEntryInfo)).ReadObject (reader);
1283 public void Bug539563 ()
1285 new DataContractSerializer (typeof (NestedContractType));
1289 public void Bug560155 ()
1291 var g = Guid.NewGuid ();
1292 Person p1 = new Person ("UserName", g);
1293 Assert.AreEqual ("name=UserName,id=" + g, p1.ToString (), "#1");
1294 MemoryStream memStream = new MemoryStream ();
1295 DataContractSerializer ser = new DataContractSerializer (typeof (Person));
1297 ser.WriteObject (memStream, p1);
1298 memStream.Seek (0, SeekOrigin.Begin);
1299 Person p2 = (Person) ser.ReadObject (memStream);
1300 Assert.AreEqual ("name=UserName,id=" + g, p2.ToString (), "#1");
1303 private T Deserialize<T> (string xml)
1305 return Deserialize<T> (xml, typeof (T));
1308 private T Deserialize<T> (string xml, Type runtimeType)
1310 DataContractSerializer ser = new DataContractSerializer (typeof (T));
1311 XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
1312 object o = ser.ReadObject (xr);
1313 Assert.AreEqual (runtimeType, o.GetType (), "#DS0");
1317 public Dictionary<string, object> GenericDictionary (Dictionary<string, object> settings)
1319 using (MemoryStream ms = new MemoryStream ()) {
1320 DataContractSerializer save = new DataContractSerializer (settings.GetType ());
1321 save.WriteObject (ms, settings);
1325 DataContractSerializer load = new DataContractSerializer (typeof (Dictionary<string, object>));
1326 return (Dictionary<string, object>) load.ReadObject (ms);
1331 public void GenericDictionaryEmpty ()
1333 Dictionary<string, object> in_settings = new Dictionary<string, object> ();
1334 Dictionary<string, object> out_settings = GenericDictionary (in_settings);
1335 out_settings.Clear ();
1339 public void GenericDictionaryOneElement ()
1341 Dictionary<string, object> in_settings = new Dictionary<string, object> ();
1342 in_settings.Add ("one", "ONE");
1343 Dictionary<string, object> out_settings = GenericDictionary (in_settings);
1344 Assert.AreEqual ("ONE", out_settings ["one"], "out");
1345 out_settings.Clear ();
1349 public void IgnoreDataMember ()
1351 var ser = new DataContractSerializer (typeof (MemberIgnored));
1352 var sw = new StringWriter ();
1353 using (var w = XmlWriter.Create (sw, settings)) {
1354 ser.WriteObject (w, new MemberIgnored ());
1356 Assert.AreEqual (@"<MemberIgnored xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><body><Bar>bar</Bar></body></MemberIgnored>", sw.ToString (), "#1");
1361 public class MemberIgnored
1364 MemberIgnoredBody body = new MemberIgnoredBody ();
1367 public class MemberIgnoredBody
1370 public string Foo = "foo";
1372 public string Bar = "bar";
1375 public enum Colors {
1380 public enum Colors2 {
1384 [DataContract (Name = "_ColorsWithDC")]
1385 public enum ColorsWithDC {
1387 [EnumMember (Value = "_Red")]
1395 public enum ColorsEnumMemberNoDC {
1396 [EnumMember (Value = "_Red")]
1404 public class DCWithEnum {
1405 [DataMember (Name = "_colors")]
1406 public Colors colors;
1410 public class DCWithTwoEnums {
1412 public Colors colors;
1414 public Colors colors2;
1418 public class DCWithNullableEnum {
1420 public Colors? colors;
1424 [DataContract (Namespace = "Base")]
1425 public class BaseDC {
1430 [DataContract (Namespace = "Derived")]
1431 public class DerivedDC : BaseDC {
1433 public int derivedVal;
1437 public class NestedDC {
1438 public NestedDC (string name) { this.Name = name; }
1445 public class NestingDC {
1447 public NestedDC Field1;
1449 public NestedDC Field2;
1452 [DataContract (Namespace = "test1")]
1453 public class NestedDC2 {
1454 public NestedDC2 (string name) { this.Name = name; }
1460 [DataContract (Namespace = "test2")]
1461 public class NestingDC2 {
1463 public NestedDC2 Field;
1467 public class DCEmpty
1469 // serializer doesn't touch it.
1470 public string Foo = "TEST";
1473 [DataContract (Namespace = "")]
1474 public class DCEmptyNoNS
1479 public class DCSimple1
1482 public string Foo = "TEST";
1486 public class DCHasNonDC
1489 public NonDC Hoge= new NonDC ();
1494 public string Whee = "whee!";
1498 public class DCHasSerializable
1501 public SimpleSer1 Ser = new SimpleSer1 ();
1504 [DataContract (Name = "Foo")]
1505 public class DCWithName
1507 [DataMember (Name = "FooMember")]
1508 public string DMWithName = "value";
1511 [DataContract (Name = "")]
1512 public class DCWithEmptyName
1516 [DataContract (Name = null)]
1517 public class DCWithNullName
1521 [DataContract (Namespace = "")]
1522 public class DCWithEmptyNamespace
1527 public class SimpleSer1
1529 public string Doh = "doh!";
1531 public string Bah = "bah!";
1534 public class Wrapper
1537 public class DCWrapped
1543 public class CollectionContainer
1545 Collection<string> items = new Collection<string> ();
1548 public Collection<string> Items {
1549 get { return items; }
1553 [CollectionDataContract]
1554 public class DataCollection<T> : Collection<T>
1559 public class DataCollectionContainer
1561 DataCollection<string> items = new DataCollection<string> ();
1564 public DataCollection<string> Items {
1565 get { return items; }
1570 class SerializeNonDCArrayType
1573 public NonDCItem [] IPAddresses = new NonDCItem [0];
1576 public class NonDCItem
1578 public int [] Data { get; set; }
1582 public class VerifyObjectNameTestData
1585 string Member1 = "foo";
1587 public string GetMember() { return Member1; }
1590 [XmlRoot(ElementName = "simple", Namespace = "")]
1591 public class SimpleXml : IXmlSerializable
1593 void IXmlSerializable.ReadXml (XmlReader reader)
1597 void IXmlSerializable.WriteXml (XmlWriter writer)
1601 XmlSchema IXmlSerializable.GetSchema ()
1609 public class ReferenceWrapper
1611 [DataMember (Order = 1)]
1612 public ReferenceType T;
1614 [DataMember (Order = 2)]
1615 public ReferenceType T2;
1618 [DataContract (IsReference = true)]
1619 public class ReferenceType
1622 public string F = "x";
1625 public class MyList : IList<string>
1627 List<string> l = new List<string> ();
1628 public void Clear () { l.Clear (); }
1629 public void Add(string s) { l.Add (s);}
1630 public void Insert(int idx, string s) { l.Insert(idx,s);}
1631 public bool Contains(string s) { return l.Contains(s); }
1632 public IEnumerator<string> GetEnumerator () { return l.GetEnumerator (); }
1633 IEnumerator IEnumerable.GetEnumerator () { return l.GetEnumerator (); }
1634 public bool Remove(string s) { return l.Remove(s); }
1635 public void RemoveAt(int i) { l.RemoveAt (i);}
1636 public void CopyTo (string [] arr, int index) { l.CopyTo (arr, index);}
1637 public int IndexOf (string s) { return l.IndexOf (s); }
1639 public int Count { get { return l.Count; } }
1640 public bool IsReadOnly { get { return ((IList<string>) l).IsReadOnly; } }
1641 public string this [int index] { get { return l [index]; } set { l [index] = value; } }
1645 internal class InterfaceCollectionType
1648 public IList<int> Array { get; set; }
1652 public class NestedContractType
1655 public NestedContractType Nested;
1657 public string X = "x";
1673 [CollectionDataContract (Name = "NAME", Namespace = "urn:foo", ItemName = "ITEM", KeyName = "KEY", ValueName = "VALUE")]
1674 public class MyDictionary<K,V> : Dictionary<K,V>
1679 [DataContract(Namespace="http://example.com/schemas/asx")]
1680 public class DummyEntry
1683 public DummyEntryInfo EntryInfo { get; set; }
1685 public string Href { get; set; }
1688 [DataContract(Namespace="http://example.com/schemas/asx"),
1689 KnownType(typeof(PartDummyEntryInfo))]
1690 public abstract class DummyEntryInfo
1694 [DataContract(Namespace="http://example.com/schemas/asx")]
1695 public class DummyPlaylist
1697 public IList<DummyEntry> entries = new List<DummyEntry> ();
1700 public IList<DummyEntry> Entries { get { return entries; } set {entries = value;} }
1703 [DataContract(Namespace="http://example.com/schemas/asx")]
1704 public class PartDummyEntryInfo : DummyEntryInfo
1706 public PartDummyEntryInfo() {}
1711 [DataContract(Namespace="http://example.com/schemas/asx")]
1712 public class AsxEntryInfo
1715 public string AdvertPrompt { get; set; }
1724 readonly public string name;
1726 readonly public Guid Id = Guid.Empty;
1728 public Person (string nameIn, Guid idIn)
1734 public override string ToString()
1736 return string.Format ("name={0},id={1}", name, Id);