2016-04-08 11 views
0

を送信するには、私はC#クライアントにC#のサーバーからこれを送信して問題がないSignalr私はC#でタイプを定義した、ネストされたキー/値辞書

using Message = System.Collections.Generic.Dictionary<string, object>; 

と呼ばれます。

しかし今、彼らは、図示のように値のペアの一つは、メッセージの配列になりたい(はダミーの値で変数を追跡)以下:

 Message msg = new Message(); 
     msg.Add("timestamp", Tools.ToMS(seconds, microseconds)); 
     msg.Add("DateTime", Tools.ToISO(this.seconds, this.microseconds)); 
     msg.Add("guid", Guid.NewGuid().ToString()); 
     msg.Add("heading", this.heading); 
     msg.Add("correction", this.correction); 
     msg.Add("valid", this.valid); 
     msg.Add("lat", lat); 
     msg.Add("lon", lon); 
     msg.Add("altitude", altitude); 
     msg.Add("Channel", "Oxford.GPS"); 

     Message[] tracked = new Message[2]; 
     tracked[0] = new Message(); 
     tracked[1] = new Message(); 
     tracked[0].Add("first", 1); 
     tracked[1].Add("second", 2); 
     msg.Add("tracked", tracked); 
     return msg; 

[OK]を、私は、送信中にエラーを取得していません、しかし、受信側に埋め込まれた辞書ではなく、私がここで

 Type: Object 
HasValues: 1 
    First: [1x1 Newtonsoft.Json.Linq.JProperty] 
    Last: [1x1 Newtonsoft.Json.Linq.JProperty] 
    Count: 1 
    Parent: [1x1 Newtonsoft.Json.Linq.JArray] 
    Root: [1x1 Newtonsoft.Json.Linq.JArray] 
    Next: [1x1 Newtonsoft.Json.Linq.JObject] 
Previous: [] 
    Path: [1x1 System.String] 

Newtonsoft.Json.Linq.JArray

の配列を取得しています、辞書に変換されていないことは詳細なトレースは、クライアントに到着示すされているものです〜する私の訓練を受けていない目に良いKS:

{"C":"d-4A172629-B,5549|C,0|D,1","M":[{"H":"GatewayHub","M":"post","A":[{"timestamp":1450469910308,"DateTime":"2015-12-18T20:18:30.3090000Z","guid":"60ef4307-1225-40f9-b0e0-f2f1d87e760d","heading":210.340958,"correction":3,"valid":true,"lat":42.299856271140619,"lon":-83.698864895162188,"altitude":269.147216796875,"Channel":"Oxford.GPS","tracked":[{"first":1},{"second":2}]}]}]}) 

はい、それを信じるか、私はそれからではなく、ネストされた値について、また作品のMatlabのイベントを介してこれを送信していません。

+0

これを試すことができます:https://stackoverflow.com/questions/32314638/signalr-typenamehandling – dbc

答えて

0

私の目標は、「サーバ」ボックス - >別のマシン上のMatlabクライアントからのセンサードライバ(dllとして書かれたもの)からの値を単に渡すことなので、私はこれをやっている方法を変更しました。

私は動的なC#型を使用し、SignalRのJSON.NETにそれを与えるバイナリ構造体の値を取っています。これは、十分に効率的なエンコーディングを行います。

 proxy.On<string, dynamic>("post2", (chan, pkt) => 
     { 
      Console.WriteLine("channel: " + chan); 
      pkt.channel = chan; 
      trigger2(pkt); 
     }); 

や(MATLABで埋め込まれた)埋め込まれたC#のDLLの内部データを取得:

それから私は行うことができます。私はイベント(最後の行)をトリガし、完全なJSON.NETオブジェクトをMatlabに送信します。これは.SelectToken()を使用して値を取得できます。

私はこれがきちんとしていると思ったので、あなたはそれを醜いと呼ぶことができ、私は泣かないでしょう。

関連する問題