gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:28:02 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com