首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Protobuf-Net ArgumentNullException

Protobuf-Net ArgumentNullException
EN

Stack Overflow用户
提问于 2012-05-09 12:57:41
回答 1查看 90关注 0票数 1

我正在尝试使用protobuf-net发送一个类(名为RPCMessage),其中包含另一个自定义类(名为MessageArguments)的列表。我扩展了MessageArguments,根据我希望参数的值类型(在本例中是浮点型),让它有一个不同的类。我得到以下异常: ArgumentNullException:已知类型不能为空。如果有帮助的话,我正在使用.Net 3.5。

要序列化的代码:

代码语言:javascript
复制
public static void EncodeMessage(MessageType messageType, object messageClass, ref NetOutgoingMessage outMessage){
    byte[] serialised;

    var serializableObject = messageClass as RPCMessage;
    var memStream = new MemoryStream();
    Serializer.SerializeWithLengthPrefix(memStream, serializableObject,
    PrefixStyle.Base128);       
}

存储消息的代码:

代码语言:javascript
复制
[Serializable,
ProtoContract,
ProtoInclude(3, typeof(FloatArgument))]
public class RPCMessage {
    [ProtoMember(1)]
    public byte code;
    [ProtoMember(2)]
    public List<MessageArgument> args;

    public RPCMessage(){}

    public RPCMessage (byte _code, List<MessageArgument> _args){
        code = _code;
        args = _args;
    }
}

存储消息参数的代码:

代码语言:javascript
复制
[Serializable,
ProtoContract,
ProtoInclude(3, typeof(FloatArgument)))]
public class MessageArgument{
    [ProtoMember(1)]
    public byte id; 

    public MessageArgument(){}

    public MessageArgument(byte _id){
        id = _id;
    }
}

最后,被调用

代码语言:javascript
复制
List<MessageArgument> args = new List<MessageArgument>();
args.Add(new FloatArgument(0, 1f));
MessageParser.EncodeMessage(type, new RPCMessage(0, args), ref outMessage);

我知道我可能遗漏了一些基本的东西,但我无论如何也搞不清楚那是什么

EN

回答 1

Stack Overflow用户

发布于 2012-05-09 17:39:23

我没有足够的资料来完整地再现,但我有一些观察:

  • [ProtoInclude]代表继承层次结构;FloatArgument不可能同时从MessageArgumentRPCMessage派生,所以我假设(通过命名) RPCMessage上的包含是不正确的,应该从
  • 中删除。由于您使用的是object,因此不能使用通用API;请尝试:

Serializer.NonGeneric.SerializeWithLengthPrefix(memStream,serializableObject,PrefixStyle.Base128,1);

然后,这将成功地序列化和克隆。

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

https://stackoverflow.com/questions/10510081

复制
相关文章

相似问题

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