2011-11-09 29 views
2

サーバからクライアントに辞書を送る方法を教えてください。私は、次の辞書にソケットで辞書を送信するサーバからクライアントへのプログラミング

Dictionary rates = new Dictionary(); 
     rates.Add("usd", 47.5); 
     rates.Add("eur", 60.4); 
     rates.Add("ukp", 78.8); 

UPDATE送信やりたい

コードがwork.Whereは私の問題ではないのですか?このアプローチが間違っているかどうか?クライアントで

public void GetListn() 
    { 
     var dataToSend = new DataToSend { Rates = new Dictionary<string, decimal>() }; 

     dataToSend.Rates.Add("asd", decimal.Parse("12.23")); 
     dataToSend.Rates.Add("asd", decimal.Parse("41.11")); 
     dataToSend.Rates.Add("asd", decimal.Parse("25.23")); 

     var stream = new MemoryStream(); 
     var formatter = new BinaryFormatter(); 
     formatter.Serialize(stream, dataToSend.Rates); 

     client.Send(stream.ToArray()); 
    } 


public class DataToSend 
{ 
    public Dictionary<string, decimal> Rates { get; set; } 
} 

コード:

 private void WindowLoaded(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

      _server.Connect(_ipep); 

      _server.Send(Encoding.Unicode.GetBytes("GetList")); 

      _data = new byte[BufferSize]; 

      _recv = _server.Receive(_data); 

      var stream = new MemoryStream(_server.Receive(_data)); 
      var formatter = new BinaryFormatter(); 
      var dataToSend = (DataToSend)formatter.Deserialize(stream); 

     } 
     catch (Exception exception) 
     { 
      MessageBox.Show(exception.Message, "Error", MessageBoxButton.OK, 
           MessageBoxImage.Error); 
     } 

    public class DataToSend 
    { 
     public Dictionary<string, string> Rates { get; set; } 
    } 
+0

無回答?????? –

答えて

0

Dictionary rates = new Dictionary();

は私のサーバーで正しいコード

コードを表示してください?あなたのサンプルコードから

私はあなたがspecificly辞書について尋ねられたので、あなたは、そう、とにかく

Dictionary rates = new Dictionary<string, decimal>();を意味と仮定します、私はまた、あなたがすでに生のデータを送ることができると仮定しますか?その場合には、新しいクラスを作成します。

[Serialisable] 
public class DataToSend 
{ 
    public Dictionary<string, decimal> Rates { get; set; } 
} 

、あなたのクライアントにDataToSendオブジェクトを記入し、

var stream = new MemoryStream(); 
var formatter = new BinaryFormatter(); 
formatter.Serialize(stream, DataToSend); 

のようにそれをシリアル化し、ソケットを通じて、そのストリームを送信します。

+0

クライアントのDataToSendをDictionary に変換するにはどうすればよいですか? –

+0

"共有オブジェクト"などのクラスライブラリを作成し、両方のプロジェクトにインクルードします。そこにDataToSendクラスを配置します。その後、クライアントで逆シリアル化してオブジェクトに戻すことができます。 –

+0

どうすればいいか教えてください。 –

関連する問題