@@ -18,6 +18,36 @@ public XmlSerializerTests()
18
18
Thread . CurrentThread . CurrentUICulture = CultureInfo . InstalledUICulture ;
19
19
}
20
20
21
+ [ Test ]
22
+ public void Can_serialize_a_list_of_items_with_interface_type ( )
23
+ {
24
+ var items = new NamedItems
25
+ {
26
+ Items = new List < INamed >
27
+ {
28
+ new Person
29
+ {
30
+ Name = "Foo" ,
31
+ Age = 50 ,
32
+ Price = 19.95m ,
33
+ StartDate = new DateTime ( 2009 , 12 , 18 , 10 , 2 , 23 ) ,
34
+ Items = new List < Item >
35
+ {
36
+ new Item { Name = "One" , Value = 1 } ,
37
+ }
38
+ } ,
39
+ new Item { Name = "Two" , Value = 2 } ,
40
+ new Item { Name = "Three" , Value = 3 }
41
+ }
42
+ } ;
43
+
44
+ var xml = new XmlSerializer ( ) ;
45
+ var doc = xml . Serialize ( items ) ;
46
+ var expected = GetNamedItemsXDoc ( CultureInfo . InvariantCulture ) ;
47
+
48
+ Assert . AreEqual ( expected . ToString ( ) , doc ) ;
49
+ }
50
+
21
51
[ Test ]
22
52
public void Can_serialize_a_list_which_is_the_content_of_root_element ( )
23
53
{
@@ -289,7 +319,12 @@ public void Serializes_Properties_In_Specified_Order()
289
319
Assert . AreEqual ( expected . ToString ( ) , doc ) ;
290
320
}
291
321
292
- class Person
322
+ interface INamed
323
+ {
324
+ string Name { get ; set ; }
325
+ }
326
+
327
+ class Person : INamed
293
328
{
294
329
public string Name { get ; set ; }
295
330
@@ -304,7 +339,7 @@ class Person
304
339
public bool ? IsCool { get ; set ; }
305
340
}
306
341
307
- class Item
342
+ class Item : INamed
308
343
{
309
344
public string Name { get ; set ; }
310
345
@@ -336,6 +371,12 @@ class WackyPerson
336
371
public ContactData ContactData { get ; set ; }
337
372
}
338
373
374
+ class NamedItems
375
+ {
376
+ [ SerializeAs ( Content = true ) ]
377
+ public List < INamed > Items { get ; set ; }
378
+ }
379
+
339
380
[ SerializeAs ( Name = "People" ) ]
340
381
class Contacts
341
382
{
@@ -527,6 +568,32 @@ static XDocument GetSortedPropsXDoc()
527
568
return doc ;
528
569
}
529
570
571
+ static XDocument GetNamedItemsXDoc ( IFormatProvider culture )
572
+ {
573
+ var doc = new XDocument ( ) ;
574
+ var root = new XElement ( "NamedItems" ) ;
575
+ var element = new XElement ( "Person" ) ;
576
+ var items = new XElement ( "Items" ) ;
577
+
578
+ items . Add ( new XElement ( "Item" , new XElement ( "Name" , "One" ) , new XElement ( "Value" , 1 ) ) ) ;
579
+
580
+ element . Add (
581
+ new XElement ( "Name" , "Foo" ) ,
582
+ new XElement ( "Age" , 50 ) ,
583
+ new XElement ( "Price" , 19.95m . ToString ( culture ) ) ,
584
+ new XElement ( "StartDate" , new DateTime ( 2009 , 12 , 18 , 10 , 2 , 23 ) . ToString ( culture ) )
585
+ ) ;
586
+
587
+ element . Add ( items ) ;
588
+ root . Add ( element ) ;
589
+ root . Add ( new XElement ( "Item" , new XElement ( "Name" , "Two" ) , new XElement ( "Value" , 2 ) ) ) ;
590
+ root . Add ( new XElement ( "Item" , new XElement ( "Name" , "Three" ) , new XElement ( "Value" , 3 ) ) ) ;
591
+
592
+ doc . Add ( root ) ;
593
+
594
+ return doc ;
595
+ }
596
+
530
597
static XDocument GetPeopleXDoc ( IFormatProvider culture )
531
598
{
532
599
var doc = new XDocument ( ) ;
0 commit comments