Mercurial > pub > bltoolkit
diff HowTo/TypeBuilder/XmlSerialization.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HowTo/TypeBuilder/XmlSerialization.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,66 @@ +using System.IO; +using System.Xml.Serialization; + +using NUnit.Framework; + +using BLToolkit.Reflection; +using BLToolkit.EditableObjects; +using BLToolkit.TypeBuilder; + +namespace HowTo.TypeBuilder +{ + [TestFixture] + public class XmlSerializationTest + { + /*[a]*/[XmlType(AnonymousType = true)]/*[/a]*/ + public abstract class MyClassA + { + public abstract string ValueA { get; set; } + } + + [XmlType(AnonymousType = true)] + /*[a]*/[XmlIncludeAbstract(typeof(MyClassA))]/*[/a]*/ + /*[a]*/[XmlIncludeAbstract(typeof(MyClassC))]/*[/a]*/ + public abstract class MyClassB + { + public abstract string ValueB { get; set; } + public abstract MyClassA ValueMyClassA { get; set; } + + public abstract EditableList<MyClassA> MyList { get; set; } + } + + /*[a]*/[XmlType("abs:MyClassC")]/*[/a]*/ + public abstract class MyClassC : MyClassA { } + + [Test] + public void Test() + { + MyClassB original = TypeAccessor<MyClassB>.CreateInstance(); + MyClassB serialized; + XmlSerializer sr = new XmlSerializer(/*[a]*/TypeAccessor<MyClassB>.Type/*[/a]*/); + + original.ValueB = "string value B"; + original.ValueMyClassA.ValueA = "string value A"; + original.MyList.Add(TypeAccessor<MyClassA>.CreateInstance()); + original.MyList.Add(TypeAccessor<MyClassC>.CreateInstance()); + + using (MemoryStream stm = new MemoryStream()) + { + sr.Serialize(stm, original); + stm.Position = 0L; + serialized = (MyClassB)sr.Deserialize(stm); + } + + Assert.That(serialized.ValueB, Is.EqualTo(original.ValueB)); + Assert.That(serialized.ValueMyClassA.ValueA, Is.EqualTo(original.ValueMyClassA.ValueA)); + + Assert.AreEqual(original.MyList.Count, serialized.MyList.Count); + Assert.That(serialized.MyList[0] is MyClassA); + Assert.That(serialized.MyList[1] is MyClassA); + Assert.That(serialized.MyList[1] is MyClassC); + + Assert.AreEqual(serialized.MyList[0].GetType(), TypeFactory.GetType(typeof(MyClassA))); + Assert.AreEqual(serialized.MyList[1].GetType(), TypeFactory.GetType(typeof(MyClassC))); + } + } +} \ No newline at end of file