1

我对Family继承自的类使用以下数据结构IList<string>

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本例中的。

4

1 回答 1

2

XmlSerializer和其他几个一样,protobuf-net 在列表和实体之间画了一条硬线。就 protobuf-net 而言,不能两者兼而有之。如果您不希望它选择“列表”,您可以使用IgnoreListHandling(IIRC) on [ProtoContract]- 但这显然不会序列化列表中的项目。通常最好是具有名称和列表的对象:

[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>();
}
于 2013-04-29T02:00:14.063 回答