【发布时间】:2011-10-17 12:10:39
【问题描述】:
我正在尝试在我的项目中使用 ProtoBuf-NET(主要是 Silverlight 4 项目)。
我在序列化我的模型集合时遇到了困难,它们都是这样定义的:
private List<T> _itemsSet;
public IEnumerable<T> TSet
{
get {return _itemsSet;}
set {_itemsSet = value == null ? new List<T>() : new List<T>(value);}
}
public void AddT(T item)
{
//Do my logic here
_itemsSet.Add(item);
}
更新:首先我无法序列化它 - No serializer defined for type: System.Collections.Generic.IEnumerable1[MyType]`。其次,我认为我将无法根据手动和 protobuf-net 源代码分析对其进行反序列化。
- 有没有办法扩展 protobuf-net 以向 ProtoMemeber 属性中的外部 Add 方法提供委托?
- 为什么使用
ProtoMember(1, OverwriteList=true)不起作用?它不应该覆盖集合并且不应该关心Add<T>()方法吗?为什么不尝试将此属性设置为 T[] 或List<T>或任何可分配给IEnumerable<T>的集合? - 有没有办法提供自定义反射机制来处理 Silverlight 中的私有字段,例如:实现:
public interface IReflectable{ object GetValue(FieldInfo field); void SetValue(FieldInfo field, object value); }来处理私有字段。我已经使用这种方法来处理带有 Db4o 的私有字段:http://community.versant.com/Forums/tabid/98/aft/10881/Default.aspx - 除了创建继承的
MyTypeCollection<T> : Collection<T>,我还有哪些选择?
【问题讨论】:
-
您是否尝试过在包含类上实现
ISerializable? -
我已将其归因于 ProtoContract(IEnumerable 通用参数类型)
-
您可能还会发现Surrogates 很有用。
标签: c# silverlight protobuf-net