Exemple #1
0
        public static void IncludeParents(this RuntimeTypeModel model, ITypeIdentifier typeIdentifier, MetaType type)
        {
            if (type.Type.BaseType == typeof(object) || type.Type.BaseType == null)
            {
                return;
            }
            var metaBase = model.Add(type.Type.BaseType, true);

            model.IncludeParents(typeIdentifier, metaBase);

            if (IsRegisteredType(typeIdentifier, type) || IsRegisteredGenericType(typeIdentifier, type))
            {
                foreach (var field in metaBase.GetFields())
                {
                    if (!type.GetFields().Select(x => x.FieldNumber).Contains(field.FieldNumber))
                    {
                        type.AddField(field.FieldNumber, field.Member.Name);
                    }
                }
            }
        }
Exemple #2
0
        public Serializer(ITypeIdentifier identifier)
        {
            Id = Guid.NewGuid();
            proteusTypeModel = new ProteusRuntimeTypeModel(identifier);
            this.identifier = identifier;
            protobufTypeModel = ModelBuilder.New();
            List<Type> builtProxies = new List<Type>();
            var factory = new ProxyFactory(this.identifier, Id);

            foreach (var item in identifier.GetAvailableTypesAndTheirSerializableParents())
            {
                if (item.IsGenericTypeDefinition)
                    continue;
                var proxy = factory.GetProxy(item);
                var metaType = protobufTypeModel.Add(item, false);
                protobufTypeModel.IncludeParents(identifier, metaType);
                metaType.SetSurrogate(proxy);
                builtProxies.Add(proxy);

            }

            // builtProxies.Add(px);
        }