Esempio n. 1
0
        public DynamicFormatter(CerasSerializer serializer, bool isStatic)
        {
            _ceras = serializer;

            var type = typeof(T);

            BannedTypes.ThrowIfNonspecific(type);

            var schema = isStatic
                                        ? _ceras.GetStaticTypeMetaData(type).PrimarySchema
                                        : _ceras.GetTypeMetaData(type).PrimarySchema;

            var typeConfig = _ceras.Config.GetTypeConfig(type, isStatic);

            typeConfig.VerifyConstructionMethod();

            if (!schema.IsPrimary)
            {
                throw new InvalidOperationException("Non-Primary Schema requires SchemaFormatter instead of DynamicFormatter!");
            }

            if (schema.Members.Count == 0)
            {
                _serializer   = (ref byte[] buffer, ref int offset, T value) => { };
                _deserializer = (byte[] buffer, ref int offset, ref T value) => { };
                return;
            }

            _serializer   = GenerateSerializer(_ceras, schema, false, isStatic).Compile();
            _deserializer = GenerateDeserializer(_ceras, schema, false, isStatic).Compile();
        }
Esempio n. 2
0
        public DynamicObjectFormatter(CerasSerializer serializer)
        {
            _ceras = serializer;

            var type = typeof(T);

            BannedTypes.ThrowIfNonspecific(type);

            var meta = _ceras.GetTypeMetaData(type);

            var typeConfig = _ceras.Config.GetTypeConfig(type);

            typeConfig.VerifyConstructionMethod();


            var schema = meta.PrimarySchema;

            if (schema.Members.Count > 0)
            {
                _dynamicSerializer   = GenerateSerializer(schema);
                _dynamicDeserializer = GenerateDeserializer(schema);
            }
            else
            {
                _dynamicSerializer   = (ref byte[] buffer, ref int offset, T value) => { };
                _dynamicDeserializer = (byte[] buffer, ref int offset, ref T value) => { };
            }
        }