static RepresentedType RegisterType(string typeName, Type type)
        {
            var resolved = new RepresentedType {
                Name = type?.ToSerializableName() ?? typeName
            };

            fromStringMap [resolved.Name] = resolved;

            if (type != null)
            {
                resolved.ResolvedType = type;
                fromTypeMap [type]    = resolved;
            }

            return(resolved);
        }
        internal RepresentedMemberInfo(SerializationInfo info, StreamingContext context)
        {
            MemberKind = (RepresentedMemberKind)info.GetValue(nameof(MemberKind), typeof(RepresentedMemberKind));
            Name       = info.GetString(nameof(Name));
            CanWrite   = info.GetBoolean(nameof(CanWrite));

            var declaringTypeName = info.GetString(nameof(DeclaringType));

            if (declaringTypeName != null)
            {
                DeclaringType = RepresentedType.Lookup(declaringTypeName);
            }

            var memberType = info.GetString(nameof(MemberType));

            if (memberType != null)
            {
                MemberType = RepresentedType.Lookup(memberType);
            }
        }
        internal RepresentedMemberInfo(RepresentedType declaringType, MemberInfo memberInfo)
        {
            if (declaringType == null)
            {
                throw new ArgumentNullException(nameof(declaringType));
            }

            if (memberInfo == null)
            {
                throw new ArgumentNullException(nameof(memberInfo));
            }

            resolved = true;

            if (memberInfo is FieldInfo)
            {
                MemberKind = RepresentedMemberKind.Field;
                MemberType = RepresentedType.Lookup(((FieldInfo)memberInfo).FieldType);
                CanWrite   = true; // TODO: Or only if public?
            }
            else if (memberInfo is PropertyInfo)
            {
                var propertyInfo = (PropertyInfo)memberInfo;
                MemberKind = RepresentedMemberKind.Property;
                MemberType = RepresentedType.Lookup(propertyInfo.PropertyType);
                CanWrite   = propertyInfo.CanWrite && propertyInfo.GetSetMethod() != null;
            }
            else
            {
                throw new ArgumentException("must be FieldInfo or PropertyInfo", nameof(memberInfo));
            }

            Name = memberInfo.Name;
            ResolvedMemberInfo = memberInfo;
            DeclaringType      = declaringType;
        }
 public RepresentedMemberInfo(MemberInfo memberInfo)
     : this(RepresentedType.Lookup(memberInfo?.DeclaringType), memberInfo)
 {
 }
示例#5
0
 object IObjectReference.GetRealObject(StreamingContext context)
 {
     return(RepresentedType.Lookup(Name));
 }