none
如何序列化 Linq对象 RRS feed

  • 问题

  • 请问各位老师,如何对Linq的对象进行序列化?

    一般情况下,Linq 文件 dbml 都是直接拖表过来生成的,然后也有一个属性叫“序列化模式”,只有“单向”选择。 但是在使用Linq对象相关序列化用途时,系统就提示出错,说对象没有标注可序列化。(也不可能一个一个去标注[Serializable],万一我重新生产就惨了!) 请问如何可以让Linq的对象序列化。

    而且这个序列化的模式“单向”到底起了什么作用?

    谢谢!

    2010年9月4日 5:56

答案

  • 版主的做法是使用SQLMetal这个代码生成工具来生成数据库的代码文件。至于所生成的实体类是否可以序列化,则是通过/serialization:unidirectional这个参数来进行控制的。这个做法和你在对象关系设计器上设置那个【序列化模式】是一样的。使用这两个方法中的任一方法都会使所创建的实体类可序列化。而这是通过给实体类添加DataContractAtrribute特性,以及给实体类的列成员添加DataMemberAttribute特性来实现的。比如:

    [Table(Name="dbo.Customers")]
    [DataContract()]
    public partial class Customers
    { 
     [Column(Storage="_CustomerID")]
     [DataMember(Order=1)]
     public string CustomerID
     {
     get{ return this._CustomerID; }
     set{ this._CustomerID = value; }
     }
    }
    
    • 已标记为答案 Mog Liang 2010年9月22日 1:26
    2010年9月17日 6:11

全部回复

  • 默认是面向WCF的,所以有 DataContractAttribute属性

    sqlmetal /code:nwserializable.vb /language:vb "c:\northwnd.mdf" /sprocs /functions /pluralize /serialization:unidirectional



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年9月4日 14:47
    版主
  • 不太明白。能说得具体一些吗?

    谢谢

    2010年9月9日 9:57
  • 版主的做法是使用SQLMetal这个代码生成工具来生成数据库的代码文件。至于所生成的实体类是否可以序列化,则是通过/serialization:unidirectional这个参数来进行控制的。这个做法和你在对象关系设计器上设置那个【序列化模式】是一样的。使用这两个方法中的任一方法都会使所创建的实体类可序列化。而这是通过给实体类添加DataContractAtrribute特性,以及给实体类的列成员添加DataMemberAttribute特性来实现的。比如:

    [Table(Name="dbo.Customers")]
    [DataContract()]
    public partial class Customers
    { 
     [Column(Storage="_CustomerID")]
     [DataMember(Order=1)]
     public string CustomerID
     {
     get{ return this._CustomerID; }
     set{ this._CustomerID = value; }
     }
    }
    
    • 已标记为答案 Mog Liang 2010年9月22日 1:26
    2010年9月17日 6:11