annotate HowTo/TypeBuilder/XmlSerialization.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Xml.Serialization;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.EditableObjects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.TypeBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace HowTo.TypeBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class XmlSerializationTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 /*[a]*/[XmlType(AnonymousType = true)]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public abstract class MyClassA
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public abstract string ValueA { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 [XmlType(AnonymousType = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /*[a]*/[XmlIncludeAbstract(typeof(MyClassA))]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 /*[a]*/[XmlIncludeAbstract(typeof(MyClassC))]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public abstract class MyClassB
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public abstract string ValueB { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public abstract MyClassA ValueMyClassA { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public abstract EditableList<MyClassA> MyList { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 /*[a]*/[XmlType("abs:MyClassC")]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 public abstract class MyClassC : MyClassA { }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 MyClassB original = TypeAccessor<MyClassB>.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 MyClassB serialized;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 XmlSerializer sr = new XmlSerializer(/*[a]*/TypeAccessor<MyClassB>.Type/*[/a]*/);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 original.ValueB = "string value B";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 original.ValueMyClassA.ValueA = "string value A";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 original.MyList.Add(TypeAccessor<MyClassA>.CreateInstance());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 original.MyList.Add(TypeAccessor<MyClassC>.CreateInstance());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 using (MemoryStream stm = new MemoryStream())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 sr.Serialize(stm, original);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 stm.Position = 0L;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 serialized = (MyClassB)sr.Deserialize(stm);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 Assert.That(serialized.ValueB, Is.EqualTo(original.ValueB));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 Assert.That(serialized.ValueMyClassA.ValueA, Is.EqualTo(original.ValueMyClassA.ValueA));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 Assert.AreEqual(original.MyList.Count, serialized.MyList.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 Assert.That(serialized.MyList[0] is MyClassA);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 Assert.That(serialized.MyList[1] is MyClassA);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 Assert.That(serialized.MyList[1] is MyClassC);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 Assert.AreEqual(serialized.MyList[0].GetType(), TypeFactory.GetType(typeof(MyClassA)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 Assert.AreEqual(serialized.MyList[1].GetType(), TypeFactory.GetType(typeof(MyClassC)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 }