我对继承自IList<string>
的Family
类使用以下数据结构:
public class Family : IList<string>
{
public string LastName { get; set; }
//IList<string> members
. .
.
//IList<string> members
}
我创建了自己的RuntimeTypeModel
并将Family
类型添加到其中,如下所示:
RuntimeTypeModel myModel = RuntimeTypeModel.Create();
MetaType familyMetaType = myModel.Add(typeof(Family), true);
familyMetaType.AddField(1, "LastName");
familyMetaType.AddField(2, "Item").IsPacked = true; ;
familyMetaType.CompileInPlace();
myModel.Compile();
然后我创建一个Family
对象并序列化它:
Family family = new Family();
family.LastName = "Sawan";
family.Add("Amer");
using (FileStream fs = new FileStream("Dump.proto", FileMode.Create))
myModel.Serialize(fs, family);
但是当我反序列化它时,我只获得string
集合的成员而不是LastName
值。
我应该将RuntimeTypeModel
设置为什么配置,以使其序列化其他对象,例如本例中的LastName
。
答案 0 :(得分:2)
与XmlSerializer
和其他几个人一样,protobuf-net在列表和实体之间划清界限。就protobuf-net而言,某些东西不可能同时存在。如果您不希望它选择“列表”,则可以在IgnoreListHandling
上使用[ProtoContract]
(IIRC) - 但这显然不会序列化中的项目列表。通常最好是具有名称且具有列表的对象:
[ProtoContract]
public class Family
{
[ProtoMember(1)] public string LastName { get; set; }
[ProtoMember(2)] public IList<string> Items {get{return items;}}
private readonly IList<string> items = new List<string>();
}