| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | using System;using System.Linq.Expressions;using System.Runtime.Serialization;namespace InABox.Core{    [Serializable]    public abstract class SerializableExpression<T> : ISerializable // where T : Entity    {        protected SerializableExpression(SerializationInfo info, StreamingContext context)        {            var value = (string)info.GetValue("Expression", typeof(string));            Expression = CoreUtils.StringToExpression(value);            Deserialize(info, context);        }        public SerializableExpression(Expression<Func<T, object?>> expression)        {            Expression = CoreUtils.ExtractMemberExpression(expression);        }        public SerializableExpression()        {            Expression = Expression.Parameter(typeof(T), "x");        }        public SerializableExpression(string property)        {            Expression = CoreUtils.GetMemberExpression(typeof(T), property);        }        public Expression Expression { get; set; }        public virtual void GetObjectData(SerializationInfo info, StreamingContext context)        {            info.AddValue("Expression", CoreUtils.ExpressionToString(typeof(T), Expression, true));            Serialize(info, context);        }        public abstract void Serialize(SerializationInfo info, StreamingContext context);        public abstract void Deserialize(SerializationInfo info, StreamingContext context);        public override string ToString()        {            return Expression != null ? CoreUtils.ExpressionToString(typeof(T), Expression, true) : "";        }    }}
 |