XML序列化循环参考

时间:2018-04-06 11:13:46

标签: c# xml serialization

在我的应用程序中,我使用以下代码来序列化对象:

    private static string Serialize(Type type, object objectToSerialize)
    {
        StringBuilder builder = new StringBuilder();
        using (TextWriter writer = new StringWriter(builder))
        {
            XmlSerializer serializer = new XmlSerializer(type);
            serializer.Serialize(writer, objectToSerialize);
        }
        return builder.ToString();
    }

此代码到目前为止工作正常。

我们引入了一个新类,如下所示:

    [Serializable]
    public class Restriction 
    {
        public string Id { get; set; }
        public ResticType Type { get; set; }
        public Restriction Parent { get; set; }
        public List<Restriction> Children { get; set; }  
    }

如果我尝试序列化它,我会得到以下异常:

A circular reference was detected while serializing an object of type Restriction

我已经发现,由于父类和子类同时属于Restriction

,这种情况发生了

我已经尝试将Parent-Property设置为NonSerialized,但这不起作用。

不幸的是我无法更改序列化的代码...

我该怎么做才能序列化这个类?

实际我唯一的想法是在我的Restriction-class中实现IXmlSerializable并自己读取和编写xml。我希望还有另一种方式......

1 个答案:

答案 0 :(得分:2)

  

我已经尝试将Parent-Property设置为NonSerialized,但这不起作用。

NonSerialized用于二进制序列化。请改用XmlIgnore

请注意,您必须在反序列化后手动恢复Parent属性:

void RestoreParentRelationship(Restriction restriction)
{
    foreach (var child in restriction.Children)
        child.Parent = restriction;
}