public void SubtypeTest()
    {
        var expected = new SubtypeClass {
            Field = new SubclassB {
                SomethingForClassB = 33
            }, Field2 = new SubclassA()
        };
        var actual = Roundtrip(expected);

        Assert.AreEqual(SubclassType.B, actual.Subtype);
        Assert.IsTrue(actual.Field is SubclassB);
    }
        public static string GetSubtype(string buildCode, string genotype)
        {
            SubtypeClass        subtypeClass = SubtypeFactory.ClassesByID[GenotypeFactory.GenotypesByName[genotype].Subtypes];
            List <SubtypeEntry> allSubtypes  = subtypeClass.GetAllSubtypes();

            for (int i = 0; i < allSubtypes.Count; i++)
            {
                if (allSubtypes[i].Code == buildCode[1].ToString())
                {
                    return(allSubtypes[i].Name);
                }
            }
            return(string.Empty);
        }
    public void SubSubtypeTest()
    {
        var expected = new SubtypeClass
        {
            Field = new SubSubclassC(3)
            {
                SomeSuperStuff     = 1,
                SomethingForClassB = 2
            },
            Field2 = new SubclassA()
        };
        var actual = Roundtrip(expected);

        Assert.AreEqual(SubclassType.C, actual.Subtype);
        Assert.IsTrue(actual.Field is SubSubclassC);
        Assert.AreEqual(actual.Field.SomeSuperStuff, expected.Field.SomeSuperStuff);
        Assert.AreEqual(((SubSubclassC)actual.Field).SomethingForClassB,
                        ((SubSubclassC)expected.Field).SomethingForClassB);
        Assert.AreEqual(((SubSubclassC)actual.Field).SomethingForClassC,
                        ((SubSubclassC)expected.Field).SomethingForClassC);
    }