首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么以下的protobuf-net使用是非法的?

为什么以下的protobuf-net使用是非法的?
EN

Stack Overflow用户
提问于 2011-05-25 03:47:08
回答 1查看 258关注 0票数 1
代码语言:javascript
复制
  public interface IYObject
  {
    string X { get; }
  }

  public class YObject : IYObject
  {
    public string X { get; set; }
  }

  public class D
  {
    public IYObject Y { get; set; }
  }

  class Program
  {
    static void Main()
    {
      var m = RuntimeTypeModel.Default;
      m.Add(typeof(D), true).Add("Y");
      m.Add(typeof(IYObject), false).AddSubType(1, typeof(YObject)).Add("X");
      var d = new D { Y = new YObject { X = "a" } };
      using (var ms = new MemoryStream())
      {
        Serializer.Serialize(ms, d);
        ms.Position = 0;
        var d2 = Serializer.Deserialize<D>(ms);
        Debug.Assert(d.Y.X == d2.Y.X);
      }
    }
  }

当我尝试向IYObject添加子类型时,代码失败

代码语言:javascript
复制
System.InvalidOperationException occurred
  Message=Sub-types can only be adedd to non-sealed classes
  Source=protobuf-net
  StackTrace:
       at ProtoBuf.Meta.MetaType.AddSubType(Int32 fieldNumber, Type derivedType)
  InnerException: 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-25 07:41:30

在大约2分钟前,这是非法的,因为接口不支持已知类型。

现在,这种使用是非法的,因为它不能安全地序列化IYObject.X,因为它没有setter。但是,只要我们将自己限制到可以合理序列化的接口成员,或者具体类型的成员,这现在就被提交了。使用属性或类型模型。See here for the scenarios that are now available (通过代码或下一个public drop)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6115986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档