- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我尝试按照 NetworkComms 示例所说的那样序列化一个对象时,我从 SendObject 方法中得到了这个错误。这似乎有些愚蠢,但我不知道我需要做什么,而且我认为实现 IExplicitlySerialize 接口(interface)不是答案。这是我的调用方法和序列化类:
public static void SendTestPacket()
{
var message = "This is a test packet";
NetworkComms.SendObject("PacketPrintToConsole", "192.168.1.105", 5614, new PacketPrintToConsole(message));
}
[ProtoContract]
public class PacketPrintToConsole
{
[ProtoMember(1)]
public string Message { get; set; }
public PacketPrintToConsole() { }
public PacketPrintToConsole(string message)
{
this.Message = message;
}
}
最佳答案
也许您已经想通了,但对于在这里找到它的其他人(比如我)来说。这就是答案。
该错误消息告诉您,您必须定义序列化程序。您有一个要发送的对象,但您没有告诉 NetworkComms 要使用的序列化程序。因此,您可以在对象中实现 IExplicitlySerialize 或使用已经为 protobuf-net 创建的序列化程序。
您需要使用NetworkCommsDotNet.DPSBase.ProtobufSerializer。您必须引用从可以在 github 上获得的 NetworkComms 源编译的 ProtobufSerializer.dll,然后定义 SendReceiveOptions。
例子:
SendReceiveOptions customSendReceiveOptions = new SendReceiveOptions<ProtobufSerializer>();
ConnectionInfo connectionInfo = new ConnectionInfo("192.168.1.105", 5614);
TCPConnection serverConnection = TCPConnection.GetConnection(connectionInfo, customSendReceiveOptions);
var message = "This is a test packet";
serverConnection.SendObject("PacketPrintToConsole", new PacketPrintToConsole(message));
这只需要在对象将被序列化发送的地方完成。接收客户端只需要具有具有相同对象类的 protobuf-net 即可反序列化。
使用 SendReceiveObject 请求消息的示例。
SendReceiveOptions customSendReceiveOptions = new SendReceiveOptions<ProtobufSerializer>();
NetworkComms.AppendGlobalIncomingPacketHandler<int>("GetMessage", GetMessageRequest, customSendReceiveOptions);
发送结果的方法:
private static void GetMessageRequest(PacketHeader packetheader, Connection connection, int incomingobject)
{
connection.SendObject("MessageReply", new MessageObject(message));
}
然后在客户端:
ConnectionInfo connectionInfo = new ConnectionInfo("192.168.2.105", 5614);
TCPConnection serverConnection = TCPConnection.GetConnection(connectionInfo);
MessageObject myMessageObject = serverConnection.SendReceiveObject<ImageWrap>("GetMessage", "MessageReply", 1000);
if (myMessageObject != null)
{
Console.WriteLine(myMessageObject.Message);
}
关于c# - NetworkComms 自定义对象错误 - "objectToSerialize must implement IExplicitlySerialize",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42751099/
当我尝试按照 NetworkComms 示例所说的那样序列化一个对象时,我从 SendObject 方法中得到了这个错误。这似乎有些愚蠢,但我不知道我需要做什么,而且我认为实现 IExplicitly
我是一名优秀的程序员,十分优秀!