2016-06-07 4 views
0

J'ai une classe qui possède des propriétés d'arborescence d'expression. lorsque j'essaie de le sérialiser en utilisant l'attribut serializable afin de configurer l'état de session SQL Server, j'ai l'erreur suivante: .. Unable to serialize the session state, SerializationException: Type 'System.Linq.Expressions.Expression ..., comme le montre l'image.Sérialiser une classe avec les propriétés d'expression Linq pour l'état de session SQL Server

Est-ce que quelqu'un sait comment je peux résoudre ce problème pour être en mesure de gérer l'état de la session en mode SQL Server. Merci.

enter image description here

Ma classe ressemble à quelque chose comme ceci:

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

} 

Répondre

1

Il n'y aurait aucun sens à sérialiser un Expression. Tu devrais l'ignorer.

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

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

Regardez ici pour plus d'informations: https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx

+0

Merci Jeroen, effectivement la [NonSerialized] attribut travaillé, mais je ne suis toujours pas sûr de savoir pourquoi je ne devrais pas sérialiser les expressions. Je n'ai pas fini de sérialiser toutes les classes requises du projet donc je ne suis pas encore sûr si ces expressions ne vont pas être un problème lors de l'obtention des valeurs de session ...? –

+0

Une expression est une fonction. Vous ne sérialisez que les données. La fonction est constante et définie dans votre programme. Les paramètres (valeurs de session) sont des données. –

+0

Comme vous pouvez le voir, votre expression contient uniquement une constante. '5'. La prochaine fois que votre programme fonctionnera, il sera toujours '5'. Donc ça ne changera jamais. Si vous voulez une variable, vous devrez créer une propriété supplémentaire. 'Expression > lambda = num => num