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中的Protobuf-net抛出fieldaccesexceptions

在WP7中,通过反射访问非公共成员仅限于它所定义的程序集。这是一个安全功能,旨在防止访问内部电话api。

你的_IntVals成员是私有的,因此不能被proto_buffers程序集访问。

相关文章:
  • 没有找到相关文章