WP7中的Protobuf-net抛出fieldaccesexceptions
本文关键字:fieldaccesexceptions 抛出 Protobuf-net 中的 WP7 | 更新日期: 2023-09-27 18:08:17
我有一个非常简单的类,我试图序列化:
[ProtoContract]
public class SettingStore {
public event EventHandler ContentsChanged;
[ProtoMember(1)]
private Dictionary<string, string> _StringVals = new Dictionary<string, string>(50);
[ProtoMember(2)]
private Dictionary<string, int> _IntVals = new Dictionary<string, int>(50);
public SettingStore() {
}
//Bunch of accessors omited
public static SettingStore DeSerialize(Stream data) {
return Serializer.Deserialize<SettingStore>(data);
}
public void Serialize(Stream Target) {
Serializer.Serialize<SettingStore>(Target, this);
}
}
序列化,我得到一个FieldAccessException与以下堆栈跟踪:
在System.Reflection.RuntimeFieldInfo。GetValue(对象obj)在ProtoBuf.Serializers.FieldDecorator。写入(对象值,ProtoWriter dest)在ProtoBuf.Serializers.TypeSerializer。写入(对象值,ProtoWriter dest)在ProtoBuf.Meta.RuntimeTypeModel。序列化(Int32键,对象值,ProtoWriter dest)在ProtoBuf.Meta.TypeModel。SerializeCore(ProtoWriter写入器,对象值)在ProtoBuf.Meta.TypeModel。序列化(Stream dest, Object value, SerializationContext)在ProtoBuf.Meta.TypeModel。序列化(流dest,对象值)在ProtoBuf.Serializer。Serialize[T](流目标,SettingStore实例)
反序列化时,我得到了相应的异常。
如果我将两个字典设为公共,一切都可以正常工作,但是完全破坏了我的对象结构。我用的是v2 r431分布。同样的代码在。net 4.0中工作得很好。
谢谢!
在WP7中,通过反射访问非公共成员仅限于它所定义的程序集。这是一个安全功能,旨在防止访问内部电话api。
你的_IntVals
成员是私有的,因此不能被proto_buffers程序集访问。