コード例 #1
0
        public TypeAttributeHandlerResult TryMap(AttributeMap item, TypeState s)
        {
            RuntimeTypeModel model = s.Model;
            object           tmp;
            int tag = 0;

            if (item.TryGet("tag", out tmp))
            {
                tag = (int)tmp;
            }
            Type knownType = null;

            try
            {
                if (item.TryGet("knownTypeName", out tmp))
                {
                    knownType = model.GetType((string)tmp, Helpers.GetAssembly(s.Type));
                }
                else if (item.TryGet("knownType", out tmp))
                {
                    knownType = (Type)tmp;
                }
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("Unable to resolve sub-type of: " + s.Type.FullName, ex);
            }
            if (knownType == null)
            {
                throw new InvalidOperationException("Unable to resolve sub-type of: " + s.Type.FullName);
            }
            s.DerivedTypes.Add(new DerivedTypeCandidate(tag, knownType));
            return(TypeAttributeHandlerResult.Done);
        }