Пример #1
0
        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);
        }