/// <inheritdoc/>
        protected override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            var structureValue = Value as Structure;

            if (typeof(IEntity).IsAssignableFrom(Field.ValueType))
            {
                // serializing entity value as key
                if (ValueKey != null)
                {
                    info.AddValue("value", ValueKey.Format());
                }
                else
                {
                    info.AddValue("value", string.Empty);
                }
            }
            else if (structureValue != null)
            {
                // serializing structure value as tuple
                info.AddValue("value", structureValue.Tuple.ToRegular(), typeof(Tuple));
            }
            else
            {
                info.AddValue("value", Value, Field.ValueType);
            }
        }