2017-03-12 11 views
1

NetworkCommsの例のようにオブジェクトをシリアル化しようとすると、SendObjectメソッドからこのエラーが発生します。これは愚かなもののようですが、私は何をする必要があるのか​​理解できず、IExplicitlySerializeインターフェイスを実装することは答えではないと思います。ここに私の呼び出し方法およびシリアライズさクラスがある:NetworkCommsカスタムオブジェクトエラー - "objectToSerializeはIExplicitlySerializeを実装する必要があります"

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; 
     } 

    } 
+1

あなたは今までにこれに対する解決策を見つけるか:

private static void GetMessageRequest(PacketHeader packetheader, Connection connection, int incomingobject) { connection.SendObject("MessageReply", new MessageObject(message)); } 

し、クライアント側で

?私は同じことをしています – Richard

+0

いいえ、私はしていません。ドキュメンテーションがどれほど悪いのかはまあまあです。あなたが見つけたら、私は解決策を聞いてみたい。 –

答えて

3

たぶん、あなたはすでにそれを考え出したが、誰もが(私のような)、ここでこれを見つけるため。答えはここにあります。

このエラーメッセージは、シリアライザを定義する必要があることを示しています。 送信したいオブジェクトがありますが、NetworkCommにどのシリアライザを使用するかを教えていません。 したがって、オブジェクトに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); 

方法は、結果を送信します

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); 
} 
+0

本当にありがとう、この言語に新しいと本当にこれに感謝するために苦労していたが、あなたの答えは物事をクリア! – Izion

関連する問題