【问题标题】:LINQ ToList() serialization error?LINQ ToList() 序列化错误?
【发布时间】:2012-01-06 12:19:20
【问题描述】:

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

获取列表的方法 GetAllMovies,当绑定列表时,我得到以下信息:

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. 

【问题讨论】:

  • 您的问题解决了吗?下面给出的答案似乎是正确的。
  • 不,我遇到了一个新错误:我遇到了一个新错误,在程序集“System.Data.Linq,版本=4.0.0.0,文化”中键入“System.Data.Linq.ChangeTracker+StandardChangeTracker” =neutral,PublicKeyToken=b77a5c561934e089' 未标记为可序列化
  • 您已接受下面给出的答案。

标签: c# asp.net .net linq


【解决方案1】:

试试这个

  MoviesDBDataContext.ObjectTrackingEnabled = false;

在触发查询之前。

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

【讨论】:

    【解决方案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

    【讨论】:

    • 我已经申请了 linq 类“电影”和类“电影”,但仍然是同样的错误,我能以某种方式追踪它以知道原因在哪里,我一直在为我们的问题而奋斗关于这个?
    • 可能电影包含一个不可序列化的复杂类型(在这种情况下你必须实现 ISerializable 接口)或者它没有标记 [Serializable] 属性
    • 我遇到了一个新错误,在程序集 'System.Data.Linq,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089' 中键入 'System.Data.Linq.ChangeTracker+StandardChangeTracker'未标记为可序列化。
    • 如果您正在使用实体框架,请尝试使用 POCO 将您的 EntityObjects 与数据上下文中的更改跟踪分离blogs.msdn.com/b/adonet/archive/2009/12/22/…
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2019-07-27
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多