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;
44 using System.Runtime.Serialization;
47 using System.Xml.Schema;
48 using System.Xml.Serialization;
49 using NUnit.Framework;
51 [assembly: ContractNamespace ("http://www.u2u.be/samples/wcf/2009", ClrNamespace = "U2U.DataContracts")] // bug #599889
53 namespace MonoTests.System.Runtime.Serialization
56 public class DataContractSerializerTest
58 static readonly XmlWriterSettings settings;
60 static DataContractSerializerTest ()
62 settings = new XmlWriterSettings ();
63 settings.OmitXmlDeclaration = true;
70 public string Member1;
74 [ExpectedException (typeof (ArgumentNullException))]
75 public void ConstructorTypeNull ()
77 new DataContractSerializer (null);
81 public void ConstructorKnownTypesNull ()
83 // null knownTypes is allowed. Though the property is filled.
84 Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), (IEnumerable<Type>)null).KnownTypes, "#1");
85 Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), "Foo", String.Empty, null).KnownTypes, "#2");
86 Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), new XmlDictionary ().Add ("Foo"), XmlDictionaryString.Empty, null).KnownTypes, "#3");
90 [ExpectedException (typeof (ArgumentNullException))]
91 public void ConstructorNameNull ()
93 new DataContractSerializer (typeof (Sample1), null, String.Empty);
97 [ExpectedException (typeof (ArgumentNullException))]
98 public void ConstructorNamespaceNull ()
100 new DataContractSerializer (typeof (Sample1), "foo", null);
104 [ExpectedException (typeof (ArgumentOutOfRangeException))]
105 public void ConstructorNegativeMaxObjects ()
107 new DataContractSerializer (typeof (Sample1), null,
108 -1, false, false, null);
112 public void ConstructorMisc ()
114 new DataContractSerializer (typeof (GlobalSample1));
118 public void WriteObjectContent ()
120 StringWriter sw = new StringWriter ();
121 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
122 DataContractSerializer ser =
123 new DataContractSerializer (typeof (string));
124 xw.WriteStartElement ("my-element");
125 ser.WriteObjectContent (xw, "TEST STRING");
126 xw.WriteEndElement ();
128 Assert.AreEqual ("<my-element>TEST STRING</my-element>",
133 public void WriteObjectToStream ()
135 DataContractSerializer ser =
136 new DataContractSerializer (typeof (int));
137 MemoryStream sw = new MemoryStream ();
138 ser.WriteObject (sw, 1);
139 string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
140 Assert.AreEqual (expected, Encoding.UTF8.GetString (sw.ToArray ()));
144 public void ReadObjectFromStream ()
146 DataContractSerializer ser =
147 new DataContractSerializer (typeof (int));
148 string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
149 byte[] buf = Encoding.UTF8.GetBytes (expected);
150 MemoryStream sw = new MemoryStream (buf);
151 object res = ser.ReadObject (sw);
152 Assert.AreEqual (1, res);
158 public void SerializeInt ()
160 DataContractSerializer ser =
161 new DataContractSerializer (typeof (int));
162 SerializeInt (ser, "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>");
167 [Category ("NotWorking")]
168 public void NetSerializeInt ()
170 NetDataContractSerializer ser =
171 new NetDataContractSerializer ();
172 // z:Assembly="0" ???
173 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));
176 void SerializeInt (XmlObjectSerializer ser, string expected)
178 StringWriter sw = new StringWriter ();
179 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
180 ser.WriteObject (w, 1);
182 Assert.AreEqual (expected, sw.ToString ());
185 // pass typeof(DCEmpty), serialize int
188 public void SerializeIntForDCEmpty ()
190 DataContractSerializer ser =
191 new DataContractSerializer (typeof (DCEmpty));
193 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>");
196 void SerializeIntForDCEmpty (XmlObjectSerializer ser, string expected)
198 StringWriter sw = new StringWriter ();
199 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
200 ser.WriteObject (w, 1);
202 XmlComparer.AssertAreEqual (expected, sw.ToString ());
208 public void SerializeEmptyClass ()
210 DataContractSerializer ser =
211 new DataContractSerializer (typeof (DCEmpty));
212 SerializeEmptyClass (ser, "<DCEmpty xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
216 [Category ("NotWorking")]
217 public void NetSerializeEmptyClass ()
219 NetDataContractSerializer ser =
220 new NetDataContractSerializer ();
221 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));
224 void SerializeEmptyClass (XmlObjectSerializer ser, string expected)
226 StringWriter sw = new StringWriter ();
227 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
228 ser.WriteObject (w, new DCEmpty ());
230 Assert.AreEqual (expected, sw.ToString ());
236 public void SerializeEmptyNoNSClass ()
238 var ser = new DataContractSerializer (typeof (DCEmptyNoNS));
239 SerializeEmptyNoNSClass (ser, "<DCEmptyNoNS xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" />");
242 void SerializeEmptyNoNSClass (XmlObjectSerializer ser, string expected)
244 var sw = new StringWriter ();
245 using (var w = XmlWriter.Create (sw, settings)) {
246 ser.WriteObject (w, new DCEmptyNoNS ());
248 Assert.AreEqual (expected, sw.ToString ());
250 // string (primitive)
253 public void SerializePrimitiveString ()
255 XmlObjectSerializer ser =
256 new DataContractSerializer (typeof (string));
257 SerializePrimitiveString (ser, "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">TEST</string>");
261 [Category ("NotWorking")]
262 public void NetSerializePrimitiveString ()
264 XmlObjectSerializer ser = new NetDataContractSerializer ();
265 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>");
268 void SerializePrimitiveString (XmlObjectSerializer ser, string expected)
270 StringWriter sw = new StringWriter ();
271 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
272 ser.WriteObject (w, "TEST");
274 Assert.AreEqual (expected, sw.ToString ());
277 // QName (primitive but ...)
280 [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
281 public void SerializePrimitiveQName ()
283 XmlObjectSerializer ser =
284 new DataContractSerializer (typeof (XmlQualifiedName));
285 SerializePrimitiveQName (ser, "<z:QName xmlns:d7=\"urn:foo\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\">d7:foo</z:QName>");
289 [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
290 public void NetSerializePrimitiveQName ()
292 XmlObjectSerializer ser = new NetDataContractSerializer ();
293 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>");
296 void SerializePrimitiveQName (XmlObjectSerializer ser, string expected)
298 StringWriter sw = new StringWriter ();
299 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
300 ser.WriteObject (w, new XmlQualifiedName ("foo", "urn:foo"));
302 Assert.AreEqual (expected, sw.ToString ());
308 public void SerializeSimpleClass1 ()
310 DataContractSerializer ser =
311 new DataContractSerializer (typeof (DCSimple1));
312 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>");
316 [ExpectedException (typeof (SerializationException))]
317 public void SerializeSimpleXml ()
319 DataContractSerializer ser =
320 new DataContractSerializer (typeof (SimpleXml));
321 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>");
325 [Category ("NotWorking")]
326 public void NetSerializeSimpleClass1 ()
328 NetDataContractSerializer ser =
329 new NetDataContractSerializer ();
330 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));
333 void SerializeSimpleClass1 (XmlObjectSerializer ser, string expected)
335 StringWriter sw = new StringWriter ();
336 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
337 ser.WriteObject (w, new DCSimple1 ());
339 Console.WriteLine(sw.ToString());
340 Assert.AreEqual (expected, sw.ToString ());
343 // NonDC (behavior changed in 3.5/SP1; not it's not rejected)
346 public void SerializeNonDC ()
348 DataContractSerializer ser = new DataContractSerializer (typeof (NonDC));
349 var sw = new StringWriter ();
350 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
351 ser.WriteObject (w, new NonDC ());
353 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 ());
359 public void SerializeDCHasNonDC ()
361 DataContractSerializer ser = new DataContractSerializer (typeof (DCHasNonDC));
362 var sw = new StringWriter ();
363 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
364 ser.WriteObject (w, new DCHasNonDC ());
366 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 ());
372 // DCHasSerializable itself is DataContract and has a field
373 // whose type is not contract but serializable.
374 public void SerializeSimpleSerializable1 ()
376 DataContractSerializer ser = new DataContractSerializer (typeof (DCHasSerializable));
377 StringWriter sw = new StringWriter ();
378 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
379 ser.WriteObject (w, new DCHasSerializable ());
381 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 ());
385 public void SerializeDCWithName ()
387 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
388 StringWriter sw = new StringWriter ();
389 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
390 ser.WriteObject (w, new DCWithName ());
392 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 ());
396 public void SerializeDCWithEmptyName1 ()
398 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyName));
399 StringWriter sw = new StringWriter ();
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 SerializeDCWithEmptyName2 ()
415 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
416 StringWriter sw = new StringWriter ();
418 /* DataContractAttribute.Name == "", not valid */
419 DCWithEmptyName dc = new DCWithEmptyName ();
420 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
422 ser.WriteObject (w, dc);
423 } catch (InvalidDataContractException) {
427 Assert.Fail ("Expected InvalidDataContractException");
431 [Category ("NotWorking")]
432 public void SerializeDCWithNullName ()
434 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithNullName));
435 StringWriter sw = new StringWriter ();
436 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
438 /* DataContractAttribute.Name == "", not valid */
439 ser.WriteObject (w, new DCWithNullName ());
440 } catch (InvalidDataContractException) {
444 Assert.Fail ("Expected InvalidDataContractException");
448 public void SerializeDCWithEmptyNamespace1 ()
450 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyNamespace));
451 StringWriter sw = new StringWriter ();
452 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
453 ser.WriteObject (w, new DCWithEmptyNamespace ());
460 public void SerializeWrappedClass ()
462 DataContractSerializer ser =
463 new DataContractSerializer (typeof (Wrapper.DCWrapped));
464 SerializeWrappedClass (ser, "<Wrapper.DCWrapped xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
468 [Category ("NotWorking")]
469 public void NetSerializeWrappedClass ()
471 NetDataContractSerializer ser =
472 new NetDataContractSerializer ();
473 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));
476 void SerializeWrappedClass (XmlObjectSerializer ser, string expected)
478 StringWriter sw = new StringWriter ();
479 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
480 ser.WriteObject (w, new Wrapper.DCWrapped ());
482 Assert.AreEqual (expected, sw.ToString ());
487 // CollectionContainer : Items must have a setter.
488 [ExpectedException (typeof (InvalidDataContractException))]
489 [Category ("NotWorking")]
491 public void SerializeReadOnlyCollectionMember ()
493 DataContractSerializer ser =
494 new DataContractSerializer (typeof (CollectionContainer));
496 StringWriter sw = new StringWriter ();
497 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
498 ser.WriteObject (w, null);
500 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");
502 sw = new StringWriter ();
503 var c = new CollectionContainer ();
506 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
507 ser.WriteObject (w, c);
509 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");
512 // DataCollectionContainer : Items must have a setter.
514 //[ExpectedException (typeof (InvalidDataContractException))]
515 public void SerializeReadOnlyDataCollectionMember ()
517 DataContractSerializer ser =
518 new DataContractSerializer (typeof (DataCollectionContainer));
519 StringWriter sw = new StringWriter ();
520 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
521 ser.WriteObject (w, null);
523 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");
525 sw = new StringWriter ();
526 var c = new DataCollectionContainer ();
529 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
530 ser.WriteObject (w, c);
532 // LAMESPEC: this is bogus behavior. .NET serializes
533 // System.String as "string" without overriding its
534 // element namespace, but then it must be regarded as
535 // in parent's namespace. What if there already is an
536 // element definition for "string" with the same
538 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");
542 public void SerializeGuid ()
544 DataContractSerializer ser = new DataContractSerializer (typeof (Guid));
545 StringWriter sw = new StringWriter ();
546 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
547 ser.WriteObject (w, Guid.Empty);
550 "<guid xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">00000000-0000-0000-0000-000000000000</guid>",
555 public void SerializeEnum ()
557 DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
558 StringWriter sw = new StringWriter ();
559 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
560 ser.WriteObject (w, new Colors ());
564 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>",
569 public void SerializeEnum2 ()
571 DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
572 StringWriter sw = new StringWriter ();
573 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
574 ser.WriteObject (w, 0);
577 XmlComparer.AssertAreEqual (
578 @"<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>",
583 public void SerializeEnumWithDC ()
585 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
586 StringWriter sw = new StringWriter ();
587 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
588 ser.WriteObject (w, new ColorsWithDC ());
592 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>",
597 public void SerializeEnumWithNoDC ()
599 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsEnumMemberNoDC));
600 StringWriter sw = new StringWriter ();
601 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
602 ser.WriteObject (w, new ColorsEnumMemberNoDC ());
606 @"<ColorsEnumMemberNoDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</ColorsEnumMemberNoDC>",
611 public void SerializeEnumWithDC2 ()
613 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
614 StringWriter sw = new StringWriter ();
615 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
616 ser.WriteObject (w, 3);
619 XmlComparer.AssertAreEqual (
620 @"<_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>",
625 [ExpectedException (typeof (SerializationException))]
626 public void SerializeEnumWithDCInvalid ()
628 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
629 StringWriter sw = new StringWriter ();
630 ColorsWithDC cdc = ColorsWithDC.Blue;
631 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
632 ser.WriteObject (w, cdc);
637 public void SerializeDCWithEnum ()
639 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum));
640 StringWriter sw = new StringWriter ();
641 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
642 ser.WriteObject (w, new DCWithEnum ());
646 @"<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>",
651 public void SerializeDCWithTwoEnums ()
653 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithTwoEnums));
654 StringWriter sw = new StringWriter ();
655 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
656 DCWithTwoEnums e = new DCWithTwoEnums ();
657 e.colors = Colors.Blue;
658 e.colors2 = Colors.Green;
659 ser.WriteObject (w, e);
663 @"<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>",
668 public void SerializeNestingDC2 ()
670 DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC2));
671 StringWriter sw = new StringWriter ();
672 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
673 NestingDC2 e = new NestingDC2 ();
674 e.Field = new NestedDC2 ("Something");
675 ser.WriteObject (w, e);
679 @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>",
684 public void SerializeNestingDC ()
686 DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC));
687 StringWriter sw = new StringWriter ();
688 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
689 NestingDC e = new NestingDC ();
690 e.Field1 = new NestedDC ("test1");
691 e.Field2 = new NestedDC ("test2");
692 ser.WriteObject (w, e);
696 @"<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>",
698 sw = new StringWriter ();
699 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
700 NestingDC e = new NestingDC ();
701 ser.WriteObject (w, e);
705 @"<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>",
710 public void SerializeDerivedDC ()
712 DataContractSerializer ser = new DataContractSerializer (typeof (DerivedDC));
713 StringWriter sw = new StringWriter ();
714 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
715 DerivedDC e = new DerivedDC ();
716 ser.WriteObject (w, e);
720 @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">0</baseVal><derivedVal>0</derivedVal></DerivedDC>",
725 public void SerializerDCArray ()
727 DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum []));
728 StringWriter sw = new StringWriter ();
729 DCWithEnum [] arr = new DCWithEnum [2];
730 arr [0] = new DCWithEnum (); arr [0].colors = Colors.Red;
731 arr [1] = new DCWithEnum (); arr [1].colors = Colors.Green;
732 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
733 ser.WriteObject (w, arr);
736 XmlComparer.AssertAreEqual (
737 @"<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>",
742 public void SerializerDCArray2 ()
744 List<Type> known = new List<Type> ();
745 known.Add (typeof (DCWithEnum));
746 known.Add (typeof (DCSimple1));
747 DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
748 StringWriter sw = new StringWriter ();
749 object [] arr = new object [2];
750 arr [0] = new DCWithEnum (); ((DCWithEnum)arr [0]).colors = Colors.Red;
751 arr [1] = new DCSimple1 (); ((DCSimple1) arr [1]).Foo = "hello";
753 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
754 ser.WriteObject (w, arr);
757 XmlComparer.AssertAreEqual (
758 @"<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>",
763 public void SerializerDCArray3 ()
765 DataContractSerializer ser = new DataContractSerializer (typeof (int []));
766 StringWriter sw = new StringWriter ();
767 int [] arr = new int [2];
768 arr [0] = 1; arr [1] = 2;
770 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
771 ser.WriteObject (w, arr);
774 XmlComparer.AssertAreEqual (
775 @"<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>",
780 public void SerializeNonDCArray ()
782 DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
783 StringWriter sw = new StringWriter ();
784 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
785 ser.WriteObject (xw, new SerializeNonDCArrayType ());
787 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>",
792 public void SerializeNonDCArrayItems ()
794 DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
795 StringWriter sw = new StringWriter ();
796 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
797 SerializeNonDCArrayType obj = new SerializeNonDCArrayType ();
798 obj.IPAddresses = new NonDCItem [] {new NonDCItem () { Data = new int [] {1, 2, 3, 4} } };
799 ser.WriteObject (xw, obj);
802 XmlDocument doc = new XmlDocument ();
803 doc.LoadXml (sw.ToString ());
804 XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
805 nsmgr.AddNamespace ("s", "http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization");
806 nsmgr.AddNamespace ("n", "http://schemas.datacontract.org/2004/07/System.Net");
807 nsmgr.AddNamespace ("a", "http://schemas.microsoft.com/2003/10/Serialization/Arrays");
809 Assert.AreEqual (1, doc.SelectNodes ("/s:SerializeNonDCArrayType/s:IPAddresses/s:NonDCItem", nsmgr).Count, "#1");
810 XmlElement el = doc.SelectSingleNode ("/s:SerializeNonDCArrayType/s:IPAddresses/s:NonDCItem/s:Data", nsmgr) as XmlElement;
811 Assert.IsNotNull (el, "#3");
812 Assert.AreEqual (4, el.SelectNodes ("a:int", nsmgr).Count, "#4");
816 public void SerializeArrayOfAnyTypeGuid ()
818 DataContractSerializer ser = new DataContractSerializer (typeof(object[]));
819 StringWriter sw = new StringWriter ();
820 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
821 ser.WriteObject (w, new object[] { Guid.Empty });
824 XmlComparer.AssertAreEqual (
825 "<ArrayOfanyType xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"><anyType xmlns:d2p1=\"http://schemas.microsoft.com/2003/10/Serialization/\" i:type=\"d2p1:guid\">00000000-0000-0000-0000-000000000000</anyType></ArrayOfanyType>",
830 public void SerializeArrayOfAnyTypeChar ()
832 DataContractSerializer ser = new DataContractSerializer (typeof(object[]));
833 StringWriter sw = new StringWriter ();
834 using (XmlWriter w = XmlWriter.Create (sw, settings)) {
835 ser.WriteObject (w, new object[] { new char () });
838 XmlComparer.AssertAreEqual (
839 "<ArrayOfanyType xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"><anyType xmlns:d2p1=\"http://schemas.microsoft.com/2003/10/Serialization/\" i:type=\"d2p1:char\">0</anyType></ArrayOfanyType>",
844 public void DeserializeEnum ()
846 Colors c = Deserialize<Colors> (
847 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>");
849 Assert.AreEqual (Colors.Red, c, "#de2");
853 public void DeserializeEnum2 ()
855 Colors c = Deserialize<Colors> (
856 @"<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>",
859 Assert.AreEqual (Colors.Green, c, "#de4");
863 [ExpectedException (typeof (SerializationException))]
864 public void DeserializeEnumInvalid1 ()
866 Deserialize<Colors> (
867 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></Colors>");
871 [ExpectedException (typeof (SerializationException))]
872 public void DeserializeEnumInvalid2 ()
874 Deserialize<Colors> (
875 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
879 [ExpectedException (typeof (SerializationException))]
880 public void DeserializeEnumInvalid3 ()
882 //"red" instead of "Red"
883 Deserialize<Colors> (
884 @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">red</Colors>");
888 public void DeserializeEnumFlags ()
890 Deserialize<Colors2> (
891 @"<Colors2 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
895 public void DeserializeEnumWithDC ()
897 ColorsWithDC cdc = Deserialize<ColorsWithDC> (
898 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>");
900 Assert.AreEqual (ColorsWithDC.Red, cdc, "#de6");
904 [ExpectedException (typeof (SerializationException))]
905 public void DeserializeEnumWithDCInvalid ()
907 Deserialize<ColorsWithDC> (
908 @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">NonExistant</_ColorsWithDC>");
912 public void DeserializeDCWithEnum ()
914 DCWithEnum dc = Deserialize<DCWithEnum> (
915 @"<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>");
917 Assert.AreEqual (Colors.Red, dc.colors, "#de8");
921 public void DeserializeNestingDC ()
923 NestingDC dc = Deserialize<NestingDC> (
924 @"<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>");
926 Assert.IsNotNull (dc.Field1, "#N1: Field1 should not be null.");
927 Assert.IsNotNull (dc.Field2, "#N2: Field2 should not be null.");
928 Assert.AreEqual ("test1", dc.Field1.Name, "#1");
929 Assert.AreEqual ("test2", dc.Field2.Name, "#2");
933 public void DeserializeNestingDC2 ()
935 NestingDC2 dc = Deserialize<NestingDC2> (
936 @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>");
938 Assert.IsNotNull (dc.Field, "#N1: Field should not be null.");
939 Assert.AreEqual ("Something", dc.Field.Name, "#N2");
943 public void DeserializeDerivedDC ()
945 DerivedDC dc = Deserialize<DerivedDC> (
946 @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">1</baseVal><derivedVal>2</derivedVal></DerivedDC>");
948 Assert.AreEqual (1, dc.baseVal, "#N1");
949 Assert.AreEqual (2, dc.derivedVal, "#N2");
953 public void DeserializeTwice ()
956 @"<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>";
957 DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
958 XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
959 xr.ReadStartElement ();
960 object o = ser.ReadObject (xr);
961 Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
962 ColorsWithDC cdc = (ColorsWithDC) o;
963 Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
965 o = ser.ReadObject (xr);
966 Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
967 cdc = (ColorsWithDC) o;
968 Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
969 Assert.AreEqual (XmlNodeType.EndElement, xr.NodeType, "#de6");
970 Assert.AreEqual ("any", xr.LocalName, "#de6");
971 xr.ReadEndElement ();
976 public void DeserializeEmptyNestingDC ()
978 NestingDC dc = Deserialize<NestingDC> (
979 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></NestingDC>");
981 Assert.IsNotNull (dc, "#A0: The object should not be null.");
982 Assert.IsNull (dc.Field1, "#A1: Field1 should be null.");
983 Assert.IsNull (dc.Field2, "#A2: Field2 should be null.");
985 dc = Deserialize<NestingDC> (
986 @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
988 Assert.IsNotNull (dc, "#B0: The object should not be null.");
989 Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
990 Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
992 dc = Deserialize<NestingDC> (
993 @"<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>");
995 Assert.IsNotNull (dc, "#B0: The object should not be null.");
996 Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
997 Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
1001 [ExpectedException (typeof (SerializationException))]
1002 public void DeserializeEmptyDCWithTwoEnums ()
1004 Deserialize<DCWithTwoEnums> (
1005 @"<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>");
1009 public void DeserializeDCWithNullableEnum ()
1011 DCWithNullableEnum dc = Deserialize<DCWithNullableEnum> (
1012 @"<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>");
1014 Assert.IsNull (dc.colors, "#B1: Field should be null.");
1018 public void DeserializeDCWithTwoEnums ()
1020 DCWithTwoEnums dc = Deserialize<DCWithTwoEnums> (
1021 @"<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>");
1023 Assert.AreEqual (Colors.Blue, dc.colors, "#0");
1024 Assert.AreEqual (Colors.Green, dc.colors2, "#1");
1028 public void DeserializerDCArray ()
1030 DCWithEnum [] dcArray = Deserialize<DCWithEnum []> (
1031 @"<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>");
1033 Assert.AreEqual (2, dcArray.Length, "#N1");
1034 Assert.AreEqual (Colors.Red, dcArray [0].colors, "#N2");
1035 Assert.AreEqual (Colors.Green, dcArray [1].colors, "#N3");
1039 public void DeserializerDCArray2 ()
1042 @"<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>";
1044 List<Type> known = new List<Type> ();
1045 known.Add (typeof (DCWithEnum));
1046 known.Add (typeof (DCSimple1));
1047 DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
1048 XmlReader xr = XmlReader.Create (new StringReader (xml));
1050 object [] dc = (object []) ser.ReadObject (xr);
1051 Assert.AreEqual (2, dc.Length, "#N1");
1052 Assert.AreEqual (typeof (DCWithEnum), dc [0].GetType (), "#N2");
1053 DCWithEnum dc0 = (DCWithEnum) dc [0];
1054 Assert.AreEqual (Colors.Red, dc0.colors, "#N3");
1055 Assert.AreEqual (typeof (DCSimple1), dc [1].GetType (), "#N4");
1056 DCSimple1 dc1 = (DCSimple1) dc [1];
1057 Assert.AreEqual ("hello", dc1.Foo, "#N4");
1061 public void DeserializerDCArray3 ()
1063 int [] intArray = Deserialize<int []> (
1064 @"<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>");
1066 Assert.AreEqual (2, intArray.Length, "#N0");
1067 Assert.AreEqual (1, intArray [0], "#N1");
1068 Assert.AreEqual (2, intArray [1], "#N2");
1072 public void ReadObjectNoVerifyObjectName ()
1074 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>";
1075 VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
1076 .ReadObject (XmlReader.Create (new StringReader (xml)), false);
1077 Assert.AreEqual ("bar", res.GetMember());
1081 public void ReadObjectVerifyObjectName ()
1083 string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Member1>bar</Member1></VerifyObjectNameTestData>";
1084 VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
1085 .ReadObject (XmlReader.Create (new StringReader (xml)));
1086 Assert.AreEqual ("bar", res.GetMember());
1090 [ExpectedException (typeof (SerializationException))]
1091 public void ReadObjectWrongNamespace ()
1093 string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization2""><Member1>bar</Member1></VerifyObjectNameTestData>";
1094 new DataContractSerializer (typeof (VerifyObjectNameTestData))
1095 .ReadObject (XmlReader.Create (new StringReader (xml)));
1099 public void ReferenceSerialization ()
1101 var dc = new DataContractSerializer (typeof (ReferenceWrapper));
1102 var t = new ReferenceType ();
1103 StringWriter sw = new StringWriter ();
1104 using (var xw = XmlWriter.Create (sw)) {
1105 xw.WriteStartElement ("z", "root", "http://schemas.microsoft.com/2003/10/Serialization/");
1106 dc.WriteObject (xw, new ReferenceWrapper () {T = t, T2 = t});
1107 xw.WriteEndElement ();
1109 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>";
1110 Assert.AreEqual (xml.Replace ('\'', '"'), sw.ToString (), "#1");
1113 using (XmlReader r = XmlReader.Create (new StringReader (xml)))
1115 r.ReadStartElement ();
1116 w = (ReferenceWrapper) dc.ReadObject (r);
1117 r.ReadEndElement ();
1119 Assert.AreEqual (w.T, w.T2, "#2");
1123 public void GenericSerialization ()
1125 var sw = new StringWriter ();
1126 var ser = new DataContractSerializer (typeof (Foo<string,int,int>));
1127 using (var xw = XmlWriter.Create (sw))
1128 ser.WriteObject (xw, new Foo<string,int,int> () {Field = "f"
1130 var s = sw.ToString ();
1132 var ret = (Foo<string,int,int>) ser.ReadObject (XmlReader.Create (new StringReader (s)));
1133 Assert.AreEqual ("f", ret.Field);
1137 public void GenericCollectionSerialization ()
1139 var l = new MyList ();
1142 var ds = new DataContractSerializer (typeof (MyList));
1143 var sw = new StringWriter ();
1144 using (var xw = XmlWriter.Create (sw))
1145 ds.WriteObject (xw, l);
1146 l = (MyList) ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ())));
1147 Assert.AreEqual (2, l.Count);
1151 public void GenericListOfKeyValuePairSerialization ()
1153 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 ('\'', '"');
1155 var ds = new DataContractSerializer (typeof (List<KeyValuePair<string,string>>));
1156 var d = new List<KeyValuePair<string,string>> ();
1157 d.Add (new KeyValuePair<string,string> ("foo", "bar"));
1158 var sw = new StringWriter ();
1159 using (var xw = XmlWriter.Create (sw))
1160 ds.WriteObject (xw, d);
1161 Assert.AreEqual (xml, sw.ToString (), "#1");
1162 d = (List<KeyValuePair<string,string>>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1163 Assert.AreEqual (1, d.Count, "#2");
1164 Assert.AreEqual ("bar", d [0].Value, "#3");
1168 public void GenericListOfDictionaryEntrySerialization ()
1170 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 ('\'', '"');
1172 var ds = new DataContractSerializer (typeof (List<DictionaryEntry>));
1173 var d = new List<DictionaryEntry> ();
1174 d.Add (new DictionaryEntry ("foo", "bar"));
1175 var sw = new StringWriter ();
1176 using (var xw = XmlWriter.Create (sw))
1177 ds.WriteObject (xw, d);
1178 Assert.AreEqual (xml, sw.ToString (), "#1");
1179 Assert.IsTrue (sw.ToString ().IndexOf ("i:type") >= 0);
1180 d = (List<DictionaryEntry>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1181 Assert.AreEqual (1, d.Count, "#2");
1182 Assert.AreEqual ("bar", d [0].Value, "#3");
1186 public void GenericDictionarySerialization ()
1188 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 ('\'', '"');
1190 var ds = new DataContractSerializer (typeof (Dictionary<string,string>));
1191 var d = new Dictionary<string,string> ();
1193 var sw = new StringWriter ();
1194 using (var xw = XmlWriter.Create (sw))
1195 ds.WriteObject (xw, d);
1196 Assert.AreEqual (xml, sw.ToString (), "#1");
1197 d = (Dictionary<string,string>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1198 Assert.AreEqual (1, d.Count, "#2");
1199 Assert.AreEqual ("bar", d ["foo"], "#3");
1203 public void HashtableSerialization ()
1205 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 ('\'', '"');
1207 var ds = new DataContractSerializer (typeof (Hashtable));
1208 var d = new Hashtable ();
1210 var sw = new StringWriter ();
1211 using (var xw = XmlWriter.Create (sw))
1212 ds.WriteObject (xw, d);
1213 Assert.AreEqual (xml, sw.ToString (), "#1");
1214 d = (Hashtable) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1215 Assert.AreEqual (1, d.Count, "#2");
1216 Assert.AreEqual ("bar", d ["foo"], "#3");
1220 public void CollectionContarctDictionarySerialization ()
1222 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 ('\'', '"');
1224 var ds = new DataContractSerializer (typeof (MyDictionary<string,string>));
1225 var d = new MyDictionary<string,string> ();
1227 var sw = new StringWriter ();
1228 using (var xw = XmlWriter.Create (sw))
1229 ds.WriteObject (xw, d);
1230 Assert.AreEqual (xml, sw.ToString (), "#1");
1231 d = (MyDictionary<string,string>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
1232 Assert.AreEqual (1, d.Count, "#2");
1233 Assert.AreEqual ("bar", d ["foo"], "#3");
1237 public void SerializeInterfaceCollection ()
1239 var ser = new DataContractSerializer (typeof (InterfaceCollectionType));
1240 var sw = new StringWriter ();
1241 var obj = new InterfaceCollectionType ();
1242 using (var xw = XmlWriter.Create (sw))
1243 ser.WriteObject (xw, obj);
1244 using (var xr = XmlReader.Create (new StringReader (sw.ToString ()))) {
1245 obj = (InterfaceCollectionType) ser.ReadObject (xr);
1246 Assert.IsNull (obj.Array, "#1");
1249 sw = new StringWriter ();
1250 obj.Array = new List<int> ();
1252 using (var xw = XmlWriter.Create (sw))
1253 ser.WriteObject (xw, obj);
1254 using (var xr = XmlReader.Create (new StringReader (sw.ToString ()))) {
1255 obj = (InterfaceCollectionType) ser.ReadObject (xr);
1256 Assert.AreEqual (5, obj.Array [0], "#2");
1261 public void EmptyChildren ()
1264 <DummyPlaylist xmlns='http://example.com/schemas/asx'>
1267 <EntryInfo xmlns:i='http://www.w3.org/2001/XMLSchema-instance' i:type='PartDummyEntryInfo'/>
1268 <Href>http://vmsservices.example.com:8080/VideoService.svc?crid=45541/part=1/guid=ae968b5d-e4a5-41fe-9b23-ed631b27cd21/</Href>
1273 var reader = XmlReader.Create (new StringReader (xml));
1274 DummyPlaylist playlist = (DummyPlaylist) new DataContractSerializer (typeof (DummyPlaylist)).ReadObject (reader);
1275 Assert.AreEqual (1, playlist.entries.Count, "#1");
1276 Assert.IsTrue (playlist.entries [0] is DummyEntry, "#2");
1277 Assert.IsNotNull (playlist.entries [0].Href, "#3");
1281 public void BaseKnownTypeAttributes ()
1285 <DummyPlaylist xmlns='http://example.com/schemas/asx'>
1288 <EntryInfo xmlns:i='http://www.w3.org/2001/XMLSchema-instance' i:type='PartDummyEntryInfo'/>
1293 using (XmlReader reader = XmlReader.Create (new StringReader (xml))) {
1294 DummyPlaylist playlist = new DataContractSerializer(typeof(DummyPlaylist)).ReadObject(reader) as DummyPlaylist;
1295 Assert.IsNotNull (playlist);
1300 public void Bug524083 ()
1303 <AsxEntryInfo xmlns='http://example.com/schemas/asx'>
1307 using (XmlReader reader = XmlReader.Create (new StringReader (xml)))
1308 new DataContractSerializer(typeof (AsxEntryInfo)).ReadObject (reader);
1312 public void Bug539563 ()
1314 new DataContractSerializer (typeof (NestedContractType));
1318 public void Bug560155 ()
1320 var g = Guid.NewGuid ();
1321 Person p1 = new Person ("UserName", g);
1322 Assert.AreEqual ("name=UserName,id=" + g, p1.ToString (), "#1");
1323 MemoryStream memStream = new MemoryStream ();
1324 DataContractSerializer ser = new DataContractSerializer (typeof (Person));
1326 ser.WriteObject (memStream, p1);
1327 memStream.Seek (0, SeekOrigin.Begin);
1328 Person p2 = (Person) ser.ReadObject (memStream);
1329 Assert.AreEqual ("name=UserName,id=" + g, p2.ToString (), "#1");
1332 private T Deserialize<T> (string xml)
1334 return Deserialize<T> (xml, typeof (T));
1337 private T Deserialize<T> (string xml, Type runtimeType)
1339 DataContractSerializer ser = new DataContractSerializer (typeof (T));
1340 XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
1341 object o = ser.ReadObject (xr);
1342 Assert.AreEqual (runtimeType, o.GetType (), "#DS0");
1346 public Dictionary<string, object> GenericDictionary (Dictionary<string, object> settings)
1348 using (MemoryStream ms = new MemoryStream ()) {
1349 DataContractSerializer save = new DataContractSerializer (settings.GetType ());
1350 save.WriteObject (ms, settings);
1354 DataContractSerializer load = new DataContractSerializer (typeof (Dictionary<string, object>));
1355 return (Dictionary<string, object>) load.ReadObject (ms);
1360 public void GenericDictionaryEmpty ()
1362 Dictionary<string, object> in_settings = new Dictionary<string, object> ();
1363 Dictionary<string, object> out_settings = GenericDictionary (in_settings);
1364 out_settings.Clear ();
1368 public void GenericDictionaryOneElement ()
1370 Dictionary<string, object> in_settings = new Dictionary<string, object> ();
1371 in_settings.Add ("one", "ONE");
1372 Dictionary<string, object> out_settings = GenericDictionary (in_settings);
1373 Assert.AreEqual ("ONE", out_settings ["one"], "out");
1374 out_settings.Clear ();
1378 public void IgnoreDataMember ()
1380 var ser = new DataContractSerializer (typeof (MemberIgnored));
1381 var sw = new StringWriter ();
1382 using (var w = XmlWriter.Create (sw, settings)) {
1383 ser.WriteObject (w, new MemberIgnored ());
1385 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");
1389 public void DeserializeEmptyArray ()
1391 var ds = new DataContractSerializer (typeof (string []));
1392 var sw = new StringWriter ();
1393 var xw = XmlWriter.Create (sw);
1394 ds.WriteObject (xw, new string [] {});
1396 Console.WriteLine (sw.ToString ());
1397 var sr = new StringReader (sw.ToString ());
1398 var xr = XmlReader.Create (sr);
1399 var ret = ds.ReadObject (xr);
1400 Assert.AreEqual (typeof (string []), ret.GetType (), "#1");
1404 public void ContractNamespaceAttribute ()
1406 var ds = new DataContractSerializer (typeof (U2U.DataContracts.Person));
1407 string xml = "<?xml version='1.0' encoding='utf-16'?><Person xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.u2u.be/samples/wcf/2009'><Name>Rupert</Name><Occupation><Description>Monkey</Description></Occupation></Person>";
1408 var person = new U2U.DataContracts.Person () {
1410 Occupation = new U2U.DataContracts.Job () { Description = "Monkey" }
1412 var sw = new StringWriter ();
1413 using (var xw = XmlWriter.Create (sw))
1414 ds.WriteObject (xw, person);
1415 Assert.AreEqual (xml, sw.ToString ().Replace ('"', '\''), "#1");
1419 public void Bug610036 ()
1421 var ms = new MemoryStream ();
1422 Type [] knownTypes = new Type [] { typeof (ParentClass), typeof (Foo), typeof (Bar) };
1424 var ds = new DataContractSerializer (typeof (Root), "Root", "Company.Foo", knownTypes, 1000, false, true, null);
1426 var root = new Root ("root");
1427 var bar1 = new Bar ("bar1");
1428 var bar2 = new Bar ("bar2");
1429 var bar3 = new Bar ("bar3");
1431 var foo1 = new Foo ("foo1");
1432 var foo2 = new Foo ("foo2");
1434 foo1.FDict.Add (bar1);
1435 foo1.FDict.Add (bar2);
1437 foo2.FDict.Add (bar1);
1438 foo2.FDict.Add (bar3);
1440 root.FDict.Add (foo1);
1441 root.FDict.Add (foo2);
1443 ds.WriteObject (ms, root);
1444 string result = Encoding.UTF8.GetString (ms.ToArray ());
1447 root = (Root) ds.ReadObject (ms);
1449 Assert.AreEqual (2, root.FDict.Count, "#1");
1450 int idx = result.IndexOf ("foo1");
1451 Assert.IsTrue (idx >= 0, "#2");
1452 // since "foo1" is stored as z:Ref for string, it must not occur twice.
1453 int idx2 = result.IndexOf ("foo1", idx + 1);
1454 Assert.IsTrue (idx2 < 0, "idx2 should not occur at " + idx2);
1458 public void AncestralReference ()
1460 // Reference to Parent comes inside the Parent itself.
1461 // In this case, adding reference after complete deserialization won't work (but it should).
1462 var ms = new MemoryStream ();
1463 Type [] knownTypes = new Type [] { typeof (ParentClass), typeof (Foo), typeof (Bar) };
1465 var ds = new DataContractSerializer (typeof (Parent));
1467 var org = new Parent ();
1468 ds.WriteObject (ms, org);
1469 string result = Encoding.UTF8.GetString (ms.ToArray ());
1472 var parent = (Parent) ds.ReadObject (ms);
1474 Assert.IsNotNull (parent.Child, "#1");
1475 Assert.AreEqual (parent, parent.Child.Parent, "#2");
1479 public void IXmlSerializableCallConstructor ()
1481 IXmlSerializableCallConstructor (false);
1482 IXmlSerializableCallConstructor (true);
1485 void IXmlSerializableCallConstructor (bool binary)
1487 Stream s = IXmlSerializableCallConstructorSerialize (binary);
1488 var a = new byte [s.Length];
1490 s.Read (a, 0, a.Length);
1492 IXmlSerializableCallConstructorDeserialize (s, binary);
1495 public Stream IXmlSerializableCallConstructorSerialize (bool binary)
1497 var ds = new DataSet ("ds");
1498 var dt = new DataTable ("dt");
1500 dt.Columns.Add ("n", typeof (int));
1501 dt.Columns.Add ("s", typeof (string));
1503 dt.Rows.Add (5, "five");
1504 dt.Rows.Add (10, "ten");
1506 ds.AcceptChanges ();
1508 var s = new MemoryStream ();
1510 var w = binary ? XmlDictionaryWriter.CreateBinaryWriter (s) : XmlDictionaryWriter.CreateTextWriter (s);
1512 var x = new DataContractSerializer (typeof (DataSet));
1513 x.WriteObject (w, ds);
1519 public void IXmlSerializableCallConstructorDeserialize (Stream s, bool binary)
1521 var r = binary ? XmlDictionaryReader.CreateBinaryReader (s, XmlDictionaryReaderQuotas.Max)
1522 : XmlDictionaryReader.CreateTextReader (s, XmlDictionaryReaderQuotas.Max);
1524 var x = new DataContractSerializer (typeof (DataSet));
1526 var ds = (DataSet) x.ReadObject (r);
1530 [ExpectedException (typeof (InvalidDataContractException))] // BaseConstraintType1 is neither DataContract nor Serializable.
1531 public void BaseConstraint1 ()
1533 new DataContractSerializer (typeof (BaseConstraintType3)).WriteObject (XmlWriter.Create (TextWriter.Null), new BaseConstraintType3 ());
1537 public void BaseConstraint2 ()
1539 new DataContractSerializer (typeof (BaseConstraintType4)).WriteObject (XmlWriter.Create (TextWriter.Null), new BaseConstraintType4 ());
1542 [Test] // bug #652331
1543 public void MembersNamespacesInBaseType ()
1545 string xml1 = @"<Currency>JPY</Currency><Description i:nil=""true"" />";
1546 string xml2 = @"<Currency xmlns=""http://schemas.datacontract.org/2004/07/SLProto5"">JPY</Currency><Description i:nil=""true"" xmlns=""http://schemas.datacontract.org/2004/07/SLProto5"" />";
1547 Assert.AreEqual ("JPY", MembersNamespacesInBaseType_Part<SLProto5.CashAmount> (new SLProto5.CashAmount () { Currency = "JPY" }, xml1, "#1").Currency, "r#1");
1548 Assert.AreEqual ("JPY", MembersNamespacesInBaseType_Part<SLProto5_Different.CashAmount> (new SLProto5_Different.CashAmount () { Currency = "JPY" }, xml2, "#2").Currency, "r#2");
1549 Assert.AreEqual ("JPY", MembersNamespacesInBaseType_Part<SLProto5.CashAmountDC> (new SLProto5.CashAmountDC () { Currency = "JPY" }, xml1, "#3").Currency, "r#3");
1550 Assert.AreEqual ("JPY", MembersNamespacesInBaseType_Part<SLProto5_Different.CashAmountDC> (new SLProto5_Different.CashAmountDC () { Currency = "JPY" }, xml2, "#4").Currency, "r#4");
1553 T MembersNamespacesInBaseType_Part<T> (T instance, string expectedPart, string assert)
1555 var ds = new DataContractSerializer (typeof (T));
1556 var sw = new StringWriter ();
1557 using (var w = XmlWriter.Create (sw))
1558 ds.WriteObject (w, instance);
1559 Assert.IsTrue (sw.ToString ().IndexOf (expectedPart) > 0, assert);
1560 return (T) ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ())));
1564 public void DateTimeOffsetSerialization ()
1566 var ds = new DataContractSerializer (typeof (DateTimeOffset));
1567 var sw = new StringWriter ();
1568 string xml = "<DateTimeOffset xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System'><DateTime>2011-03-01T02:05:06.078Z</DateTime><OffsetMinutes>120</OffsetMinutes></DateTimeOffset>".Replace ('\'', '"');
1570 var v = new DateTimeOffset (new DateTime (2011, 3, 1, 4, 5, 6, 78), TimeSpan.FromMinutes (120));
1571 using (var xw = XmlWriter.Create (sw, settings)) {
1572 ds.WriteObject (xw, v);
1574 Assert.AreEqual (xml, sw.ToString (), "#1");
1575 Assert.AreEqual (v, ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ()))), "#2");
1579 public void DateTimeOffsetNullableSerialization ()
1581 var ds = new DataContractSerializer (typeof (DateTimeOffset?));
1582 var sw = new StringWriter ();
1583 string xml = "<DateTimeOffset xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\"><DateTime>2012-05-04T00:34:00Z</DateTime><OffsetMinutes>120</OffsetMinutes></DateTimeOffset>";
1585 var v = new DateTimeOffset (new DateTime (2012, 05, 04, 02, 34, 0), TimeSpan.FromMinutes (120));
1586 using (var xw = XmlWriter.Create (sw, settings)) {
1587 ds.WriteObject (xw, v);
1589 Assert.AreEqual (xml, sw.ToString (), "#1");
1590 Assert.AreEqual (v, ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ()))), "#2");
1594 public void XmlDocumentSupport ()
1596 var xml = "<XmlDocumentContract xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='urn:foo'><Content><Root xmlns=''>Hello, world!</Root></Content><Nodes><child1 xmlns='' /><child2 xmlns='' /></Nodes></XmlDocumentContract>".Replace ('\'', '"');
1597 var xml2 = "<Root>Hello, world!</Root>";
1598 var obj = new XmlDocumentContract ();
1599 var doc = new XmlDocument ();
1601 obj.Content = doc.DocumentElement;
1602 doc = new XmlDocument ();
1603 doc.LoadXml ("<root><child1/><child2/></root>");
1604 var l = new List<XmlNode> ();
1605 foreach (XmlNode node in doc.DocumentElement.ChildNodes)
1607 obj.Nodes = l.ToArray ();
1608 var serializer = new DataContractSerializer (typeof (XmlDocumentContract))
1610 var sb = new StringBuilder ();
1611 using (var writer = new StringWriter (sb))
1612 serializer.WriteObject (new XmlTextWriter (writer), obj);
1613 Assert.AreEqual (xml, sb.ToString (), "#1");
1614 using (var reader = new StringReader (sb.ToString ()))
1615 obj = serializer.ReadObject (new XmlTextReader (reader)) as XmlDocumentContract;
1616 Assert.AreEqual ("Hello, world!", obj.Content != null ? obj.Content.InnerText : String.Empty, "#2");
1617 Assert.AreEqual (2, obj.Nodes != null ? obj.Nodes.Length : -1, "#3");
1621 public void ArrayAsEnumerableAsRoot ()
1623 var ds = new DataContractSerializer (typeof (IEnumerable<Guid>));
1624 var sw = new StringWriter ();
1625 using (var xw = XmlWriter.Create (sw, settings))
1626 ds.WriteObject (xw, new Guid [] {Guid.Empty});
1627 string xml = "<ArrayOfguid xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><guid>00000000-0000-0000-0000-000000000000</guid></ArrayOfguid>".Replace ('\'', '"');
1628 Assert.AreEqual (xml, sw.ToString (), "#1");
1633 public void DeserializeEmptyDictionary ()
1635 string whatItGets = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
1636 + "<MyData xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://sickhead.com/types/Example\">"
1637 + "<Data xmlns:b=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"/>"
1638 + "<FirstId>b8a7eb6f-f593-4668-8178-07be9f7266d1</FirstId>"
1639 + "<SecondId>ID-GOES-HERE</SecondId>"
1641 var serializer = new DataContractSerializer (typeof (MyData));
1642 using (var stream = new MemoryStream (Encoding.UTF8.GetBytes (whatItGets.Replace ("ID-GOES-HERE", Guid.NewGuid ().ToString ()))))
1644 var data = serializer.ReadObject (stream);
1650 public class MemberIgnored
1653 MemberIgnoredBody body = new MemberIgnoredBody ();
1656 public class MemberIgnoredBody
1659 public string Foo = "foo";
1661 public string Bar = "bar";
1664 public enum Colors {
1669 public enum Colors2 {
1673 [DataContract (Name = "_ColorsWithDC")]
1674 public enum ColorsWithDC {
1676 [EnumMember (Value = "_Red")]
1684 public enum ColorsEnumMemberNoDC {
1685 [EnumMember (Value = "_Red")]
1693 public class DCWithEnum {
1694 [DataMember (Name = "_colors")]
1695 public Colors colors;
1699 public class DCWithTwoEnums {
1701 public Colors colors;
1703 public Colors colors2;
1707 public class DCWithNullableEnum {
1709 public Colors? colors;
1713 [DataContract (Namespace = "Base")]
1714 public class BaseDC {
1719 [DataContract (Namespace = "Derived")]
1720 public class DerivedDC : BaseDC {
1722 public int derivedVal;
1726 public class NestedDC {
1727 public NestedDC (string name) { this.Name = name; }
1734 public class NestingDC {
1736 public NestedDC Field1;
1738 public NestedDC Field2;
1741 [DataContract (Namespace = "test1")]
1742 public class NestedDC2 {
1743 public NestedDC2 (string name) { this.Name = name; }
1749 [DataContract (Namespace = "test2")]
1750 public class NestingDC2 {
1752 public NestedDC2 Field;
1756 public class DCEmpty
1758 // serializer doesn't touch it.
1759 public string Foo = "TEST";
1762 [DataContract (Namespace = "")]
1763 public class DCEmptyNoNS
1768 public class DCSimple1
1771 public string Foo = "TEST";
1775 public class DCHasNonDC
1778 public NonDC Hoge= new NonDC ();
1783 public string Whee = "whee!";
1787 public class DCHasSerializable
1790 public SimpleSer1 Ser = new SimpleSer1 ();
1793 [DataContract (Name = "Foo")]
1794 public class DCWithName
1796 [DataMember (Name = "FooMember")]
1797 public string DMWithName = "value";
1800 [DataContract (Name = "")]
1801 public class DCWithEmptyName
1805 [DataContract (Name = null)]
1806 public class DCWithNullName
1810 [DataContract (Namespace = "")]
1811 public class DCWithEmptyNamespace
1816 public class SimpleSer1
1818 public string Doh = "doh!";
1820 public string Bah = "bah!";
1823 public class Wrapper
1826 public class DCWrapped
1832 public class CollectionContainer
1834 Collection<string> items = new Collection<string> ();
1837 public Collection<string> Items {
1838 get { return items; }
1842 [CollectionDataContract]
1843 public class DataCollection<T> : Collection<T>
1848 public class DataCollectionContainer
1850 DataCollection<string> items = new DataCollection<string> ();
1853 public DataCollection<string> Items {
1854 get { return items; }
1859 class SerializeNonDCArrayType
1862 public NonDCItem [] IPAddresses = new NonDCItem [0];
1865 public class NonDCItem
1867 public int [] Data { get; set; }
1871 public class VerifyObjectNameTestData
1874 string Member1 = "foo";
1876 public string GetMember() { return Member1; }
1879 [XmlRoot(ElementName = "simple", Namespace = "")]
1880 public class SimpleXml : IXmlSerializable
1882 void IXmlSerializable.ReadXml (XmlReader reader)
1886 void IXmlSerializable.WriteXml (XmlWriter writer)
1890 XmlSchema IXmlSerializable.GetSchema ()
1898 public class ReferenceWrapper
1900 [DataMember (Order = 1)]
1901 public ReferenceType T;
1903 [DataMember (Order = 2)]
1904 public ReferenceType T2;
1907 [DataContract (IsReference = true)]
1908 public class ReferenceType
1911 public string F = "x";
1914 public class MyList : IList<string>
1916 List<string> l = new List<string> ();
1917 public void Clear () { l.Clear (); }
1918 public void Add(string s) { l.Add (s);}
1919 public void Insert(int idx, string s) { l.Insert(idx,s);}
1920 public bool Contains(string s) { return l.Contains(s); }
1921 public IEnumerator<string> GetEnumerator () { return l.GetEnumerator (); }
1922 IEnumerator IEnumerable.GetEnumerator () { return l.GetEnumerator (); }
1923 public bool Remove(string s) { return l.Remove(s); }
1924 public void RemoveAt(int i) { l.RemoveAt (i);}
1925 public void CopyTo (string [] arr, int index) { l.CopyTo (arr, index);}
1926 public int IndexOf (string s) { return l.IndexOf (s); }
1928 public int Count { get { return l.Count; } }
1929 public bool IsReadOnly { get { return ((IList<string>) l).IsReadOnly; } }
1930 public string this [int index] { get { return l [index]; } set { l [index] = value; } }
1934 internal class InterfaceCollectionType
1937 public IList<int> Array { get; set; }
1941 public class NestedContractType
1944 public NestedContractType Nested;
1946 public string X = "x";
1949 class BaseConstraintType1 // non-serializable
1954 class BaseConstraintType2
1959 class BaseConstraintType3 : BaseConstraintType1
1964 class BaseConstraintType4 : BaseConstraintType2
1968 [DataContract (Namespace = "urn:foo")]
1969 public class XmlDocumentContract
1971 [DataMember (Name = "Content")]
1972 private XmlElement content;
1974 public XmlElement Content {
1975 get { return content; }
1976 set { content = value; }
1979 [DataMember (Name = "Nodes")]
1980 private XmlNode [] nodes;
1982 public XmlNode [] Nodes {
1983 get { return nodes; }
1984 set { nodes = value; }
2001 [CollectionDataContract (Name = "NAME", Namespace = "urn:foo", ItemName = "ITEM", KeyName = "KEY", ValueName = "VALUE")]
2002 public class MyDictionary<K,V> : Dictionary<K,V>
2007 [DataContract(Namespace="http://example.com/schemas/asx")]
2008 public class DummyEntry
2011 public DummyEntryInfo EntryInfo { get; set; }
2013 public string Href { get; set; }
2016 [DataContract(Namespace="http://example.com/schemas/asx"),
2017 KnownType(typeof(PartDummyEntryInfo))]
2018 public abstract class DummyEntryInfo
2022 [DataContract(Namespace="http://example.com/schemas/asx")]
2023 public class DummyPlaylist
2025 public IList<DummyEntry> entries = new List<DummyEntry> ();
2028 public IList<DummyEntry> Entries { get { return entries; } set {entries = value;} }
2031 [DataContract(Namespace="http://example.com/schemas/asx")]
2032 public class PartDummyEntryInfo : DummyEntryInfo
2034 public PartDummyEntryInfo() {}
2039 [DataContract(Namespace="http://example.com/schemas/asx")]
2040 public class AsxEntryInfo
2043 public string AdvertPrompt { get; set; }
2052 readonly public string name;
2054 readonly public Guid Id = Guid.Empty;
2056 public Person (string nameIn, Guid idIn)
2062 public override string ToString()
2064 return string.Format ("name={0},id={1}", name, Id);
2069 namespace U2U.DataContracts
2075 public string Name { get; set; }
2078 public Job Occupation { get; set; }
2085 public string Description { get; set; }
2090 //parent class with a name property
2091 [DataContract (Namespace = "Company.Foo")]
2092 public abstract class ParentClass
2096 public ParentClass (string name)
2103 public string Name{ get; set; }
2108 [DataContract (Namespace = "Company.Foo")]
2109 public class Root : ParentClass
2113 public Dict<Foo> FDict;
2116 public Root (string name)
2119 FDict = new Dict<Foo> ();
2125 [DataContract (Namespace = "Company.Foo")]
2126 public class Foo : ParentClass
2130 public Dict<Bar> FDict;
2133 public Foo (string name)
2136 FDict = new Dict<Bar> ();
2142 [DataContract (Namespace = "Company.Foo")]
2143 public class Bar : ParentClass
2146 public Bar (string name)
2152 //the custom dictionary
2153 [CollectionDataContract (ItemName = "DictItem", Namespace = "Company.Foo")]
2154 public class Dict<T> : Dictionary<string, T> where T : ParentClass
2156 public void Add (T item)
2158 Add (item.Name, item);
2163 [DataContract (IsReference = true)]
2169 Child = new Child (this);
2183 public Child (Parent parent)
2185 this.Parent = parent;
2189 public Parent Parent;
2194 public class CashAmount : Amount
2199 public class CashAmountDC : AmountDC
2205 public string Currency { get; set; }
2206 public string Description { get; set; }
2210 public class AmountDC
2213 public string Currency { get; set; }
2215 public string Description { get; set; }
2219 namespace SLProto5_Different
2221 public class CashAmount : SLProto5.Amount
2226 public class CashAmountDC : SLProto5.AmountDC
2232 [DataContract(Namespace = "http://sickhead.com/types/Example")]
2237 Data = new Dictionary<int, byte[]> ();
2241 public Guid FirstId { get; set; }
2244 public string SecondId { get; set; }
2247 public Dictionary<int, byte[]> Data { get; set; }