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(); }
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) => { }; } }