1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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 expression)
- {
- Expression = expression;
- }
- 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 SerializableExpression(SerializableExpression<T> other)
- {
- Expression = other.Expression;
- }
- 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) : "";
- }
- }
- }
|