在使用JavaScriptSerializer进行序列化时,我在其中一个字段(Linq to SQL模型)上收到错误。
Unhandled: A circular reference was detected while serializing an object of type 'Entity.ProductType'.
我决定使用ScriptIgnore属性来忽略ProductType字段序列化。
public interface IProduct
{
[ScriptIgnore]
ProductType ProductType { get; set; }
}
[MetadataType(typeof(IProduct))]
public partial class Product : IProduct
{
}
不幸的是我仍然得到错误。为什么ScriptIgnore不起作用?
答案 0 :(得分:0)
由于以下原因,我公司决定不直接序列化Linq2SQL实体:
.dbml
时,它都会忽略您的属性声明并清除它们。关于原因的一些观点:
.dbml
改变了,一个程序员可以打破另一个人的工作只是因为他不知道他添加的某些属性会带来循环问题。这是非常有益的。使用您需要的属性公开另一个对象并不是那么糟糕。例如:
var person = personDAO.getById(123);
return new
{
Code = person.Id,
Name = person.FirstName + " " + person.LastName
};
同样,这取决于你的情况。如果你将它序列化到你的视图中,我认为这不是一个好主意。如果你将它序列化到另一个应用程序,这不会有问题,所以请保持这种方式并避免循环序列化。