c# – 检测到Protobuf-net可能的递归:序列化子项和父项
作者:互联网
我是序列化的新手,甚至是protobuf的新手.这是我的问题,我有这些课程:
[ProtoContract]
class Controle
{
[ProtoMember(1, AsReference=true)]
public HashSet<Controle> ControlesInternes { get; set; }
[ProtoMember(2)]
public string TypeControle { get; set; }
[ProtoMember(3)]
public Dictionary<string, string> Attributs { get; set; }
[ProtoMember(4)]
public int Ligne { get; set; }
[ProtoMember(5)]
public string InnerText { get; set; }
[ProtoMember(6)]
public Controle Parent { get; set; }
public Controle()
{
ControlesInternes = new HashSet<Controle>();
Attributs = new Dictionary<string, string>();
}
}
[ProtoContract(SkipConstructor=true)]
class PageAspx
{
[ProtoMember(1)]
public string PrefixeControleOnilait { get; set; }
[ProtoMember(2, AsReference = true)]
public HashSet<Controle> Controles { get; set; }
private string CheminTmp;
private string nomFichier;
[ProtoMember(3)]
public string NomFichier
{
get { return nomFichier; }
set { nomFichier = value; }
}
private string titre;
[ProtoMember(4)]
public string Titre
{
get { return titre; }
set { titre = value; }
}
public PageAspx()
{ }
public PageAspx(string pNomFichier)
{
this.NomFichier = pNomFichier;
this.Controles = new HashSet<Controle>();
}
}
尝试序列化时,我收到“检测到可能的递归”错误.
但基本上,我的代码列出了aspx页面中的所有控件,并且它们是层次结构(子级,父级).这意味着在我的“PageAspx”对象生成之后,它包含页面的所有控件,并且对于每个控件都包含其父级及其子级(如果有).当我没有序列化成员ControlesInternes时,序列化进展顺利.但我需要这些信息.
如何使用protobuf保存这些数据?
解决方法:
我找到了一个解决方案:我没有序列化父项,我在“Controle”类中反序列化后使用了这个函数:
[ProtoAfterDeserialization]
protected void OnDeserialized()
{
if (ControlesInternes.Count > 0)
{
foreach (var ctl in ControlesInternes)
{
ctl.Parent = this;
}
}
}
标签:c,protocol-buffers,protobuf-net 来源: https://codeday.me/bug/20190620/1248203.html