- - PR -
ソケット通信でオブジェクトをやりとりしたい(C#)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-08-17 15:56
ソケット通信でデータをやりとりするプログラムを作成することになったのですが、
文字列や、プリミティブな型ではなくオブジェクトそのものをやりとりしたいと 考えています。 JavaであればSerializableインターフェースを実装したオブジェクトであれば ObjectOutputStream、ObjectInputStream等を利用して実現できるのですが、 C#で実現する方法はあるのでしょうか? | ||||
|
投稿日時: 2004-08-17 22:46
諸農です。
Javaのことは全然判りませんが、もしかすると SoapFormatterかBinaryFormatterクラスが役に 立つかもしれません。 キーワードは「オブジェクトのシリアル化」等々です。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-08-18 00:10
C#では、ISerializbleインタフェースがJavaのSerializableインタフェースに
相当しますが、Serializable属性を使って書く方法もあります。 (クラス宣言部に[System.Attribute.Serializable]と書く) (例) [System.Attribute.Serializable] class DataObject { ... } あとはこのデータをJubeiさんの仰る通り、 BinaryFormatterやSoapFormatterを使って Serialize()やDeserialize()すれば良いはずです。 | ||||
|
投稿日時: 2004-08-18 01:28
念のため書いておくと、クラスを(BinaryFormatter等を使って)シリアライズできるようにするためには、必ずSerializable属性を適用する必要があります。 ※「Serializable属性を使って書く方法もある」わけではありません。 ISerializableインターフェイスを実装するのは、シリアライズの方法を自分でカスタマイズする場合です。そして、その場合でもSerializable属性は必ず適用する必要があります。 --追記-- Serializable属性は、System.SerializableAttributeクラスですね。 属性を適用する場合は後ろのAttributeは省略できますので、 [System.SerializableAttribute] [System.Serializable] あるいはSystem名前空間をusingしていれば [SerializableAttribute] [Serializable] などと書けます。 [ メッセージ編集済み 編集者: なちゃ 編集日時 2004-08-18 01:33 ] | ||||
|
投稿日時: 2004-08-18 07:32
なんだかものすごくいい加減なことを書いてしまいすいません。
(そもそも名前空間違うし、あとスペルも間違ってるし) 以前、(クラス名):ISerializable{...} で書いていって できたような気がしたのですが、たぶん記憶違いですね。 次からは確認して書くようにします…。 | ||||
|
投稿日時: 2004-08-18 09:29
ISerializableとBinaryFormatterというキーワードを元に
SDKドキュメントを確認したところ、ある程度方法が理解できました。 後は、試行錯誤で何とかなりそうです。有り難うございました。 |
1