gpt4 book ai didi

c# - 检测到 Protobuf-net 可能的递归 : serialize children and parents

转载 作者:太空狗 更新时间:2023-10-30 01:07:31 25 4
gpt4 key购买 nike

一般来说,我是序列化的新手,甚至是 protobuf 的新手。这是我的问题,我有这些类(class):

[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 保存这些数据?

最佳答案

我找到了解决办法:我不序列化parents,在“Controle”类中反序列化后使用这个函数:

    [ProtoAfterDeserialization]
protected void OnDeserialized()
{
if (ControlesInternes.Count > 0)
{
foreach (var ctl in ControlesInternes)
{
ctl.Parent = this;
}
}
}

关于c# - 检测到 Protobuf-net 可能的递归 : serialize children and parents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com