我有一个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.
答案 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