如果我尝试序列化linq-to-sql实体,它默认只序列化原始字段还是会尝试访问关系字段?如果它试图抓取关系字段,有没有办法覆盖它?
答案 0 :(得分:0)
您使用的是哪个序列化程序?
答案 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序列化有正确的支持。
丹尼