c# - 意外的子类型 : MyNamespace. MyInheritedClass

标签 c# serialization protocol-buffers protobuf-net

在 protobuf-net 中序列化时出现异常 Unexpected sub-type: UnnamedGameServer.TrapInstance

这是代码:

class test
{
    void testMethod(PacketNewTrapResponse packet)
    {
        using (var stream = new MemoryStream())
        {
            Serializer.SerializeWithLengthPrefix<PacketNewTrapResponse>(stream, (PacketNewTrapResponse)packet, PrefixStyle.Base128);
        }
    }
}

[ProtoContract]
public class MapTrap
{
    [ProtoMember(1)]
    public IntegerVector2 Position;
    [ProtoMember(2)]
    public int TrapServerID;
    [ProtoMember(3)]
    public int LocationID;
}

[ProtoContract, ProtoInclude(1, typeof(MapTrap))]
class TrapInstance : MapTrap
{
    public TrapInstance(TrapProperties trap, SessionCharacter session, int serverTrapId, int locationId, IntegerVector2 position)
    {
        TrapServerID = serverTrapId;
        Trap = trap;
        Position = position;
        LocationID = locationId;
        OwnerOfTrap = session;
        LocationID = locationId;
        Position = position;
    }

    public SessionCharacter OwnerOfTrap { get; set; }
    public TrapProperties Trap { get; set; }
}

最佳答案

需要告知基类有关子类的信息,而不是相反。从子类中寻找基类微不足道,因为它在运行时很容易获得。

[ProtoContract, ProtoInclude(5, typeof(TrapInstance))]
public class MapTrap {...}

[ProtoContract]
class TrapInstance : MapTrap {...}

关于c# - 意外的子类型 : MyNamespace. MyInheritedClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14655695/

相关文章:

c# - 为什么 SmtpClient.SendAsync 挂起?

c# - 如何使用正则表达式或 linq 替换 c# 中的特定字符串

c# - 图像不显示 Xamarin.Forms

java - 使用 Jackson Serialize,如何序列化双值 null 并且在 0.0 时不返回

java - 如何将 Vector 放入 intent.extra?

object - 如何在 .proto 文件中使用 Protocol Buffer 处理泛型类型对象?

c# - Mailkit:获取消息并将它们复制到 MySQL,附件到驱动器

Java 未经检查或不安全操作消息

c++ - Protocol Buffer cpp 嵌入消息

java - Protobuf 问题 (alexeyxo/protobuf-swift)