使用 protobuf-net 为 Windows 商店应用程序序列化私有成员

Posted

技术标签:

【中文标题】使用 protobuf-net 为 Windows 商店应用程序序列化私有成员【英文标题】:Serializing private members with protobuf-net for windows store apps 【发布时间】:2014-01-14 22:58:35 【问题描述】:

我正在尝试使用 protobuf-net 库为 Windows 商店风格的应用序列化一个具有私有成员的简单自定义类:

[ProtoContract]
class ProtoTest

    [ProtoMember(1)]
    string Test;

    public ProtoTest(string test)
    
        this.Test = test;
            

当我序列化一个实例时,私有成员永远不会被序列化,而是被忽略。公开成员可以解决问题,但对于我的应用程序来说并不是一个令人满意的解决方案。有什么我在这里做错了吗,或者有人知道这是否是一个已知的错误(我进行了搜索但找不到任何东西)?

【问题讨论】:

【参考方案1】:

protobuf-net wiki中的样本。

 [ProtoContract]
    public class StandaloneExtensible : IExtensible
    
        [ProtoMember(1)]
        public int KnownField  get; set; 

        private byte[] buffer;
        Stream IExtensible.BeginAppend() 
            return Extensible.BeginAppend();
        
        Stream IExtensible.BeginQuery() 
            return Extensible.BeginQuery(buffer);
        
        void IExtensible.EndAppend(Stream stream, bool commit) 
            buffer = Extensible.EndAppend(buffer, stream, commit);
        
        void IExtensible.EndQuery(Stream stream) 
            Extensible.EndQuery(stream);
        
        int IExtensible.GetLength() 
            return Extensible.GetLength(buffer);
        
    

【讨论】:

虽然我可以使用扩展来解决这个问题,但这并不能真正提供足够的解决方案。每当我在任何其他平台(Windows / Mono / Xamarin.android / Xamarin.ios)上使用 protobuf-net 库时,我总是能够序列化私有成员。您知道这是否是阻止私有成员被序列化的 Windows 应用商店应用程序的基本限制? 如果您在 Windows 中使用它,应该没有任何限制。是同一个版本吗?就个人而言,我以前没有使用过这个库。

以上是关于使用 protobuf-net 为 Windows 商店应用程序序列化私有成员的主要内容,如果未能解决你的问题,请参考以下文章

WCF Rest 服务和 protobuf-net

使用 Protobuf-net 将大数据文件流式传输为 IEnumerable

我可以为 Protobuf-net 设置一个全局对象工厂吗?

为 protobuf-net 生成序列化程序集失败

protobuf-net 在使用 .ToProto() 时将 List<T> 转换为 List_T 类

Protobuf-net 错误 - 序列化设置为 null 的固定数组