dbml Serializable =单向,但'System.Data.Linq.EntityRef'仍未标记为可序列化

时间:2011-04-04 05:29:24

标签: c# asp.net linq-to-sql serialization

我需要一个linq-to-sql使用dbml,然后我按照这篇文章:http://www.west-wind.com/weblog/posts/147218.aspx

将子项设置为internal,将serialzable设置为unidirection并添加updatecheck = never

制作所有列

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DvdId",
  AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true,
  IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
[global::System.Runtime.Serialization.DataMemberAttribute(Order=1)]

但我还是得到了

  

在Assembly'System.Data.Linq中输入'System.Data.Linq.EntityRef`1 [[CategoryList,App_Code.55_rpva1,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null]]',Version = 4.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化。

在我的web.config中,我使用二进制

<add name="Cart" type="ShoppingCart" serializeAs="Binary" allowAnonymous="true"/>

如果我不使用linq,肯定会有效

请帮忙

2 个答案:

答案 0 :(得分:1)

可序列化,但不是通过BinaryFormatter * - 即它不是[Serializable]ISerializable

LINQ数据上下文旨在使用DataContractSerializer进行序列化,但是对于二进制文件,NetDataContractSerializer或protobuf-net也可以正常工作。

如果这是 profile 序列化....我老实说不知道你是否可以编写自己的插件序列化层 - 我从来没有需要看;但在这种情况下,我会在我的配置文件中为我实际需要的对象属性编写一个简单的非LINQ对象(DTO),并从LINQ填充该对象,并序列化


* =对于它的价值,我不认为这是件坏事; BinaryFormatter有很多导致疼痛的方法,主动支持它实际上是一个积极的事物,因为这种方法最终会让人们断绝。

答案 1 :(得分:0)

使用限制器属性进行序列化对我有用:

[Column]
[DataMember]
public int? MonitoredDirectorySubCategoryID { set; get; }

[NonSerialized]
[XmlIgnore]
[IgnoreDataMember]
private EntityRef<BasicReference> _MonitoredDirectorySubCategory = new EntityRef<BasicReference>();

[XmlIgnore]
[IgnoreDataMember]
[Association(Name = "FK_FilRef_BasRef_MonitoredDirectorySubCategoryID", IsForeignKey = true, Storage = "_MonitoredDirectorySubCategory", ThisKey = "MonitoredDirectorySubCategoryID")]
public BasicReference MonitoredDirectorySubCategory 
{ set { _MonitoredDirectorySubCategory.Entity = value; } get { return _MonitoredDirectorySubCategory.Entity; } }