我是序列化的新手,甚至是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保存这些数据?
I am new to serialization in general, and even newer to protobuf. Here is my problem, I have these classes:
[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>(); } }
When trying to serialize, I get a "possible recursion detected" error.
But basically, my code lists all controls in an aspx page, and they hierarchy (children, parents). That means that after my "PageAspx" object is made, it contains all the controls of the page, and for each of them, its parent and its children if it has any. When I don't serialize the member ControlesInternes, the serialization goes well. But I need this information.
How can I save these datas using protobuf?
最满意答案
我找到了一个解决方案:我没有序列化父项,我在“Controle”类中反序列化后使用了这个函数:
[ProtoAfterDeserialization] protected void OnDeserialized() { if (ControlesInternes.Count > 0) { foreach (var ctl in ControlesInternes) { ctl.Parent = this; } } }I found a solution: I don't serialize the parents, and I use this function after deserialization in the "Controle" class:
[ProtoAfterDeserialization] protected void OnDeserialized() { if (ControlesInternes.Count > 0) { foreach (var ctl in ControlesInternes) { ctl.Parent = this; } } }更多推荐
发布评论