在我的应用程序中,我使用以下代码来序列化对象:
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。我希望还有另一种方式......
答案 0 :(得分:2)
我已经尝试将Parent-Property设置为
NonSerialized
,但这不起作用。
NonSerialized
用于二进制序列化。请改用XmlIgnore
。
请注意,您必须在反序列化后手动恢复Parent
属性:
void RestoreParentRelationship(Restriction restriction)
{
foreach (var child in restriction.Children)
child.Parent = restriction;
}