2016-06-07 2 views
0

У меня есть класс, который имеет некоторые свойства дерева выражений. когда я пытаюсь сериализовать его, используя атрибут serializable, чтобы настроить состояние сеанса SQL Server, у меня есть следующая ошибка: .. Unable to serialize the session state, SerializationException: Type 'System.Linq.Expressions.Expression ..., как показано на рисунке.Сериализовать класс с помощью свойств выражения Linq для состояния сеанса SQL Server

Кто-нибудь знает, как я могу решить эту проблему, чтобы иметь возможность управлять состоянием сеанса в режиме SQLServer. Благодарю.

enter image description here

Мой класс выглядит что-то вроде этого:

[Serializable] 
public class Elements<T> 
{ 
    public List<T> elementsList { get; set;} 
    Expression<Func<int, bool>> lambda = num => num < 5; 

} 

ответ

1

Это не имело бы никакого смысла сериализовать Expression. Вы должны игнорировать это.

[Serializable] 
public class Elements<T> 
{ 
    public List<T> elementsList { get; set;} 

    [NonSerialized] 
    Expression<Func<int, bool>> lambda = num => num < 5; 
} 

Посмотрите здесь для получения дополнительной информации: https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx

+0

Благодаря Йерун, эффективно [NonSerialized] атрибут работал, но я до сих пор не знаете о том, почему я не должен сериализовать выражения. Я не закончил сериализацию всех классов, требуемых от проекта, поэтому я не уверен, что если эти выражения не будут проблемой при получении значений сеанса ...? –

+0

Выражение - это функция. Вы только сериализуете данные. Функция постоянна и определена в вашей программе. Параметры (значения сеанса) - это данные. –

+0

Как вы можете видеть, ваше выражение содержит только константу. '5'. В следующий раз, когда ваша программа запустится, все равно будет '5'. Так что это никогда не изменится. Если вы хотите переменную, вам нужно будет создать дополнительное свойство. 'Expression > lambda = num => num