为什么protobuf网络在没有atrributes的情况下进行序列化

本文关键字:情况下 序列化 atrributes protobuf 网络 为什么 | 更新日期: 2023-09-27 17:59:22

以下是示例:

class A
{
    public int x { get; private set; }
    public A(){}
    public A(int x)
    {
        this.x = x;
    }
}
class Program
{
    static void Main(string[] args)
    {
        A a = new A(1);
        A a1;
        using (FileStream fs = new FileStream("data", FileMode.Create, FileAccess.Write))
        {
            Serializer.Serialize(fs, a);
        }
        using (FileStream fs = new FileStream("data", FileMode.Open, FileAccess.Read))
        {
            a1 = Serializer.Deserialize<A>(fs);
        }
        Console.ReadLine();
    }  
}

类A没有任何属性或约定,但protobuf-net没有抛出任何异常。为什么?反序列化后,a1.x包含1。

目标框架为4.5。Protobuf网络版本为2.0.0.668,安装了nuget。

为什么protobuf网络在没有atrributes的情况下进行序列化

这是v2的一个功能,来自网页

"v2"已发布

"v2"是对核心发动机的一次重大检修,以允许更大的灵活性,避免了过度使用带来的许多问题仿制药。它与现有数据有线兼容旧的API仍然存在。简单地说:图书馆更干净、更精简,并且对于以后的开发来说更加通用。特别是v2允许:

  • 允许在更多平台上使用(iOS、WP7、Android版Mono、WinRT等)
  • 如果您愿意,允许在没有属性的情况下使用
  • 允许预生成序列化程序集,以便在运行时删除所有反射
  • 一般来说:只是更多的功能

(强调矿)