linq-to-sql实体序列化是否可以开箱即用?

时间:2009-09-22 16:16:10

标签: linq-to-sql serialization

如果我尝试序列化linq-to-sql实体,它默认只序列化原始字段还是会尝试访问关系字段?如果它试图抓取关系字段,有没有办法覆盖它?

2 个答案:

答案 0 :(得分:0)

您使用的是哪个序列化程序?

  • DataContractSerializer会 包括加载的关系但不包括 那些尚未加载/ null。
  • 如果XmlSerializer是双向的(即实体A指向实体B,后者又指向后面),则XmlSerializer倾向于阻碍关系。
  • 二进制格式化...我从来没有使用与其他实体有关系的L2S实体对象正常工作。我尝试了很长时间,所以也许我只是做错了...

答案 1 :(得分:0)

要添加到接受的答案的另一点:

DataContractSerializer 永远不会被序列化的关系(无论是否加载),因为DataMember文件中没有为它们生成.dbml属性

I found here当时的微软Daniel Simmons的解释:

  

这里的问题是,在SP1之前,DataContract序列化确实没有办法处理具有周期的对象的图形。作为LINQ to SQL的结果,做出了折衷决定,允许用户选择加入单向序列化并仅序列化集合而不是引用。对于您真正想要序列化引用的情况(如上面的场景),此机制不能很好地工作,但它至少可以帮助您解决某些常见情况。

     

在SP1中,向WCF添加了新的支持,使得DataContract序列化可以处理周期,但是您必须通过更改一些DataContract属性并可能还要对集合和引用类实现进行更改来选择加入。正确处理序列化,尤其是WCF的反序列化行为。在实体框架中,进行了更改以利用这些新功能,因为它尚未发布其第一个版本,但Linq to SQL仅在sp1中进行了小型服务包升级,并且未对其进行修改以利用此功能能力。

     

我没有在L2S上尝试过这个,但是有可能生成自己的类,这些类与L2S一起使用,并且对循环的WCF序列化有正确的支持。

     

丹尼