public void TestTypeInfo() { var serializer = new JsonSerializer { UseTypeInfo = true }; var o = new DerivedTypeInfo { BaseProperty = "base", DerivedProperty = "derived", InterfaceProperty = "interface" }; var json = serializer.Serialize(o); Assert.That(json, Is.EqualTo(@"{""@type"":""DerivedTypeInfo"",""BaseProperty"":""base"",""DerivedProperty"":""derived"",""InterfaceProperty"":""interface""}")); var o2 = new BaseTypeInfo { BaseProperty = "base" }; var json2 = serializer.Serialize(o2); Assert.That(json2, Is.EqualTo(@"{""BaseProperty"":""base""}")); var d = serializer.Deserialize <BaseTypeInfo>(json); Assert.That(d, Is.TypeOf <DerivedTypeInfo>()); var i = serializer.Deserialize <ITypeInfo>(json); Assert.That(i, Is.TypeOf <DerivedTypeInfo>()); }
private DerivedTypeInfo GetDerivedTypeInfo(Type type) { if (m_DerivedTypes.TryGetValue(type, out var typeInfo)) { return(typeInfo); } var derivedTypes = TypeCache.GetTypesDerivedFrom(type) .Where(t => !t.IsAbstract) .Where(t => !t.IsSubclassOf(typeof(Editor)) && !t.IsSubclassOf(typeof(EditorWindow)) && !t.IsSubclassOf(typeof(AssetImporter))) .OrderBy(t => t.Name).ToArray(); typeInfo = new DerivedTypeInfo() { types = derivedTypes, names = derivedTypes.Select(t => t.Name).ToList(), labels = derivedTypes.Select(t => { if (t.FullName.Contains("Unity")) { return(t.Name); } return("<b>" + t.Name + "</b>"); }).ToList() }; m_DerivedTypes[type] = typeInfo; return(typeInfo); }