您的位置:首页 > Web前端 > JavaScript

C#Socket通信使用DataContractJsonSerializer传递对象

2015-09-09 17:41 681 查看

使用到的命名空间

添加引用System.Runtime.Serialization.dll以及Json.Net下的Microsoft.CSharp.dll。

添加命名空间using System.IO;

using System.Runtime.Serialization.Json;

using System.Runtime.Serialization;

核心代码

要传送的对象类

using System.Runtime.Serialization;

[DataContract(Namespace = "http://www.markslin.com")]
public class Message
{
[DataMember(Order = 0)]
public String Str
{
get;
set;
}
}


客服端发送

Message msg = new Message();
msg.Str = "Hello";
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Message));
MemoryStream mStream = new MemoryStream();
serializer.WriteObject(mStream, msg);
byte[] buffer = new byte[mStream.Length];
mStream.Position = 0;
mStream.Read(buffer, 0, (int)mStream.Length);
socket.Send(buffer);


服务端接收

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Message));
byte[] buffer1 = new byte[1024];
int size=socket.Receive(buffer1, buffer1.Length, 0);
byte[] buffer2 = buffer1.Take(size).ToArray();
var stream = new MemoryStream(buffer2);
Message message = (Message)serializer.ReadObject(stream);


结束语

服务端因为不知道接收数据的大小,这里一定要将多余接收的部分去掉,否则会提示反序列化错误,未知字符\0;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: