LINQ ToList()序列化错误?

时间:2012-01-06 12:19:20

标签: c# asp.net .net linq

我有一个LINQ - >名为MoviesDB.dbml的类文件,我已经添加了一个表“Movie”,我创建了一个类“Movies”,其中我已经在所有方法中实现了。

方法GetAllMovies获取List,绑定列表时我得到以下内容:

Type 'DyMvWebsite.Movie' in Assembly 'DyMvWebsite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 

方法的代码:

        public static List<Movie> GetAllMovies()
    {
        List<Movie> oMoviesList = new List<Movie>();

        using (MoviesDBDataContext oMoviesDBDataContext = new MoviesDBDataContext())
        {
            oMoviesList = oMoviesList.ToList<Movie>(); ;
        }

        return oMoviesList;
    }

之后我尝试将[Serializable]属性放在“Movies”类中,并尝试将它放在linq设计器文件中,但同样的问题。

编辑:

按照'Massimiliano Peluso'的建议,我收到了一个新的错误:

Type 'System.Data.Linq.ChangeTracker+StandardChangeTracker' in Assembly 'System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable. 

2 个答案:

答案 0 :(得分:3)

试试这个

  MoviesDBDataContext.ObjectTrackingEnabled = false;

在触发查询之前。

如果仍然失败,那么解决方法是创建类似于Movie类的可序列化类,并映射属性。

答案 1 :(得分:2)

Movie课程中包含的所有内容也必须为Serializable

将SerializableAttribute属性应用于类型,以指示可以序列化此类型的实例。如果要序列化的对象图中的任何类型未应用SerializableAttribute属性,则公共语言运行库将抛出SerializationException。 即使该类还实现了ISerializable接口来控制序列化过程,也应用SerializableAttribute属性。 默认情况下,序列化由SerializableAttribute标记的类型中的所有公共和私有字段,除非该类型实现ISerializable接口以覆盖序列化过程。默认序列化过程会排除使用NonSerializedAttribute属性标记的字段。如果可序列化类型的字段包含特定于特定环境的指针,句柄或某些其他数据结构,并且无法在不同环境中进行有意义的重构,则可能需要将NonSerializedAttribute属性应用于该字段。

更多信息:

http://msdn.microsoft.com/en-us/library/system.serializableattribute(v=VS.100).aspx