c# - WP7 中的 Protobuf-net 抛出 FieldAccessExceptions

标签 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) at ProtoBuf.Serializers.FieldDecorator.Write(Object value, ProtoWriter dest) at ProtoBuf.Serializers.TypeSerializer.Write(Object value, ProtoWriter dest) at ProtoBuf.Meta.RuntimeTypeModel.Serialize(Int32 key, Object value, ProtoWriter dest) at ProtoBuf.Meta.TypeModel.SerializeCore(ProtoWriter writer, Object value) at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value, SerializationContext context) at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value) at ProtoBuf.Serializer.Serialize[T](Stream destination, SettingStore instance)

在反序列化时,我得到了等效的异常。

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

谢谢!

最佳答案

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

您的 _IntVals 成员是私有(private)的,因此不能被 proto-buffers 程序集访问。

关于c# - WP7 中的 Protobuf-net 抛出 FieldAccessExceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373341/

相关文章:

c# - 将 IEnumeration 项目发布到 Controller

c# - 我应该拆分我的 edmx 吗?

android - 如何检测启动应用程序的完成?

css - 诺基亚 lumia 的响应式设计技巧

java - 如何使用Protocol Buffers在内存中序列化数据?

java - 如何使用 maven 从 Java target 11 的 protobuf 生成 java stub ?

c# - DynamicMethod Reflection 发出对 Func<Task> 的调用

c# - 在网格中生成和放置按钮,通过 x,y 坐标引用

go - 使用mustEmbedUnimplemented ***方法的grpc

c# - 将 LINQ 对象列表导出到 Excel 文件