我试图使用 protobuf-net 发送一个类(称为 RPCMessage),其中包括另一个自定义类(称为 MessageArguments)的列表。我已经根据我希望参数的值类型(在本例中为浮点数)扩展了 MessageArguments 以具有不同的类。我收到以下异常:ArgumentNullException:已知类型不能为空。如果有帮助,我正在使用 .Net 3.5。
序列化代码:
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);
}
存储消息的代码:
[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;
}
}
存储消息参数的代码:
[Serializable,
ProtoContract,
ProtoInclude(3, typeof(FloatArgument)))]
public class MessageArgument{
[ProtoMember(1)]
public byte id;
public MessageArgument(){}
public MessageArgument(byte _id){
id = _id;
}
}
最后,由
List<MessageArgument> args = new List<MessageArgument>();
args.Add(new FloatArgument(0, 1f));
MessageParser.EncodeMessage(type, new RPCMessage(0, args), ref outMessage);
我知道我可能遗漏了一些基本的东西,但我一生都无法弄清楚那是什么