WP7中的Protobuf-net抛出FieldAccessExceptions

时间:2011-09-10 17:24:05

标签: c# windows-phone-7 protocol-buffers protobuf-net

我有一个非常简单的类,我正在尝试序列化:

    [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:

  

at System.Reflection.RuntimeFieldInfo.GetValue(Object obj)      在ProtoBuf.Serializers.FieldDecorator.Write(对象值,ProtoWriter dest)      在ProtoBuf.Serializers.TypeSerializer.Write(Object value,ProtoWriter dest)      在ProtoBuf.Meta.RuntimeTypeModel.Serialize(Int32 key,Object value,ProtoWriter dest)      在ProtoBuf.Meta.TypeModel.SerializeCore(ProtoWriter writer,Object value)      在ProtoBuf.Meta.TypeModel.Serialize(Stream dest,Object value,SerializationContext context)      在ProtoBuf.Meta.TypeModel.Serialize(Stream dest,Object value)      在ProtoBuf.Serializer.Serialize [T](Stream destination,SettingStore实例)

在反序列化时,我得到了equivelant异常。

如果我公开两个词典,一切正常,但完全打破了我的对象结构。我正在使用v2 r431发行版。完全相同的代码在.NET 4.0中运行良好。

谢谢!

1 个答案:

答案 0 :(得分:3)

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

您的_IntVals成员是私有的,因此原始缓冲区程序集无法访问。