/// <summary>
        /// Asserts whether an object shall be serialized or not
        /// </summary>
        /// <param name="value">
        /// the <see cref="object"/> for which the serialization is to be asserted
        /// </param>
        /// <param name="metaDataProvider">
        /// The <see cref="IMetaDataProvider"/> used to provide meta data
        /// </param>
        /// <param name="version">
        /// The data model version to be used to determine whether a class shall be serialized or not
        /// </param>
        /// <returns>
        /// returns true when the object shall be serialzed, false if not
        /// </returns>
        public bool AssertSerialization(object value, IMetaDataProvider metaDataProvider, Version version)
        {
            if (value is PersonPermission personPermission)
            {
                var classVersion = new Version(metaDataProvider.GetClassVersion(personPermission.ObjectClass.ToString()));

                if (classVersion > version)
                {
                    return(false);
                }
            }

            if (value is ParticipantPermission participantPermission)
            {
                var classVersion = new Version(metaDataProvider.GetClassVersion(participantPermission.ObjectClass.ToString()));

                if (classVersion > version)
                {
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        /// Checks the <see cref="Category"/>'s <see cref="Category.PermissibleClass"/> property for <see cref="Version"/> compatibility
        /// </summary>
        /// <param name="value">
        /// the <see cref="object"/> for which the serialization is to be asserted
        /// </param>
        /// <param name="metaDataProvider">
        /// The <see cref="IMetaDataProvider"/> used to provide meta data
        /// </param>
        /// <param name="version">
        /// The data model version to be used to determine whether a class shall be serialized or not
        /// </param>
        public void CheckCategoryPermissibleClasses(object value, IMetaDataProvider metaDataProvider, Version version)
        {
            if (value is Category category)
            {
                var permissibleClasses = category.PermissibleClass.ToList();

                foreach (var permissibleClass in permissibleClasses)
                {
                    var permissibleClassVersion = new Version(metaDataProvider.GetClassVersion(permissibleClass.ToString()));

                    if (permissibleClassVersion <= version)
                    {
                        continue;
                    }

                    category.PermissibleClass.Remove(permissibleClass);
                }
            }
        }