C# 如何序列化接口(protobuf-net)?

C# 如何序列化接口(protobuf-net)?,c#,serialization,protobuf-net,C#,Serialization,Protobuf Net,要序列化在另一个dll中声明的SomeClass中包含的SomeInterface。还有这个接口的实现 public interface SomeInterface { SomeClass Instance { get; } } public class BasicClass : SomeInterface { public BasicClass(SomeClass instance) { Instance = instance; }

要序列化在另一个dll中声明的SomeClass中包含的SomeInterface。还有这个接口的实现

public interface SomeInterface
{
     SomeClass Instance { get; }
}

public class BasicClass : SomeInterface
{
    public BasicClass(SomeClass instance)
    {
         Instance = instance;
    }

    public SomeClass Instance { get; }

    public override string ToString()
    {
         return Instance.ToDisplayString();
    }

}
若使用代理项,则不能对接口使用隐式运算符


这些任务的protobuf工具是什么?

接口没有实现,即没有数据或实例。没有要序列化的内容。您是否试图解决一个不同的问题,并认为“序列化”接口是某种解决方案?当有人试图给一个类多个角色时,通常会问您这个问题。您的业务层中可能有一个类层次结构,并尝试传输这些层次结构。不要那样做。保护它们及其结构,并改用DTO。通过这样做,您的层之间也会产生松散耦合。@jgauffin我不明白使用DTO的结构意味着什么。我在哪里可以读到这些,看一些例子?您应该能够使用
RuntimeTypeModel.Default.Add(typeof(isomointerface),true.AddSubType(50,typeof(BasicClass))在启动时显示在顶级项目中,如中所示。
[ProtoContract]
class SomeInterfaceSurrogate
{ 
      [ProtoMember(1)] public int Id { get; set; }

      public static implicit operator SomeInterface(SomeInterfaceSurrogate value)
      {
            return value == null ? null : GetInstanceForId(int id);
      }

      public static implicit operator SomeInterfaceSurrogate(SomeInterface value)
      {   
            return value == null ? null : new SomeInterfaceSurrogate()
            {
                  Id = value.GetId()
            };
      }
}