我正在尝试在我的linq-to-sql MVC2 webapp中使用XmlSerializer将复杂对象存储在数据库中。我一直在谷歌搜索和试验过去3天,无法通过这个循环引用错误。我已经阅读了许多文章,提出了如何解决这个问题的建议,但没有一篇文章对我有用。我特别想尝试这种策略,因为很多相关文章都链接到了这个。所以这篇文章似乎正在成为一种流行的方法:
http://www.west-wind.com/weblog/posts/2007/Sep/02/LINQ-to-SQL-and-Serialization
我试图在linq-to-sql中实现针对循环引用问题的这个建议修复,它只是不起作用。我有三重/四重检查,我正在将所有子属性访问修饰符更改为内部,但无济于事。无论我做什么,我总是得到循环引用错误。每次更改后我都会重新编译。我确保将Parent属性访问修饰符保留为public。
根据我读到的另一篇文章,我也尝试将所有EntitySet归结为: [System.Xml.Serialization.XmlIgnore]
这对我来说也不起作用 - 同样的错误。
我没有使用WCF - 只是在使用MVC2的webapp中使用linq到sql。无论复杂程度如何,我都可以毫无问题地序列化非linq-to-sql对象。
这是我的序列化功能:
private static string SerializeToString(object obj)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer serializer = new XmlSerializer(obj.GetType(), "");
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj, ns);
return writer.ToString();
}
}
如果有人对此有所了解,我很乐意听到。
答案 0 :(得分:1)
Espen Burod是对的。不要直接序列化您的entites。而是创建数据传输模型并序列化该模型。您可以使用AutoMapper在两者之间进行映射。
答案 1 :(得分:-1)
当您需要相互引用的对象时,会发生循环引用。序列化程序不支持这些引用。
例如:
public class Object1
{
public Object2 SecondObject { get; set; }
}
public class Object2
{
public Object1 FirstObject { get; set; }
}