【发布时间】:2010-06-21 10:29:23
【问题描述】:
我对 protobuf-net 和泛型的使用有疑问。
给定:
[DataContract]
public class CacheData
{
[DataMember(Order = 1)]
public List<CacheLoadItem<int>> Foo;
[DataMember(Order = 2)]
public List<CacheLoadItem<int>> Bar;
[DataMember(Order = 3)]
public List<CacheLoadItem<int>> XXX;
[DataMember(Order = 4)]
public List<CacheLoadItem<string>> YYY;
[DataMember(Order = 5)]
public List<CacheLoadItem<int>> Other;
[DataMember(Order = 6)]
public List<CacheLoadItem<int>> Other2;
[DataMember(Order = 7)]
public List<CacheLoadItem<int>> Other3;
[DataMember(Order = 8)]
public List<CacheLoadItem<string>> EvenMore;
[DataMember(Order = 9)]
public List<CacheLoadItem<string>> AlmostThere;
}
[DataContract]
public class CacheLoadItem<V>
{
[DataMember(Order = 1)]
public int ID;
[DataMember(Order = 2)]
public string Name;
[DataMember(Order = 3)]
public V Value;
}
具有通用 int 列表的 CacheLoadItem 可以很好地序列化,但具有通用字符串列表的 CacheLoadItem 不会。
我认为这与通用列表首先被序列化有关。
具有通用字符串列表的 CacheLoadItem 包含正确数量的项目,但具有默认/空值。
有人知道为什么会这样吗?
【问题讨论】:
-
哪个版本的protobuf-net?和平台? (常规.net?单声道?cf?Silverlight?)。我不知道这里有问题,但很乐意调查。
-
.NET 3.5 protobuf-net.dll 版本 1.0.0.282 我通过 ASP.MVC 公开协议缓冲区序列化对象,并在 Windows 窗体客户端中使用它们。
-
我会尝试对我拥有的 dll 进行单元测试,并使用非打乱的属性名称。
-
对于信息,我对 2.0.x(未完全发布)进行了测试,因为这是我在本地拥有的 - 但如果测试在 1 上失败,我会感到惊讶(并且非常感兴趣) .x
标签: c# protocol-buffers protobuf-net