私はシリアライゼーション全般に不慣れで、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」オブジェクトが作成された後、ページのすべてのコントロールが含まれ、それらのそれぞれについて、その親とその子があればそれが含まれます。member をシリアライズしないControlesInternes
と、シリアライズがうまくいきます。しかし、私はこの情報が必要です。
protobuf を使用してこれらのデータを保存するにはどうすればよいですか?