关键词:udp,json,List,dataGridView
以下代码要做什么:udp发送json格式请求,服务器会立刻返回数据(当然是json格式),对数据进行解析(json.net),将数据保存在List并在dataGridView中显示。不定条目,新的就创建,旧的就留着。
构造json结构请求
//构造要发送的请求,用json格式
public JObject GetJObject()
{
var obj = new JObject {{"Command","Get Status"}};
return obj;
}
转为字符串
string command = GetJObject().ToString();
发送命令并接收json结构数据
datByte = jTudpt.Transmit(System.Text.Encoding.Default.GetBytes(command), 0, timeOut,1);
//上面这个函数为udp函数,发送数据后服务器会立即返回数据.此处返回的数据为Json格式,报文类型如下
JArray jlist = (JArray)JsonConvert.DeserializeObject(datString);
for(int i=0;i<jlist.Count;i++)
{
bool isNewServer = true;
JObject tempo = JObject.Parse(jlist[i].ToString());
//获取到数据
string name = tempo["Name"].ToString();
string status = tempo["Status"].ToString();
if (stateInfo.Count > 0)
{
foreach (DatStatus datStatus in stateInfo)
{
if (datStatus.name == name)
{
isNewServer = false;
//其他操作
}
}
}
if(stateInfo.Count == 0 || isNewServer)
{
DatStatus datStatus = new DatStatus();
//接收到list
datStatus.name = name;
datStatus.status = status;
stateInfo.Add(datStatus);
//在dataGridView中创建一行数据
int rowIndex = this.dataGridViewInfo.Rows.Add();
dataGridViewInfo.Rows[rowIndex].Cells[0].Value = name;//更新状态
dataGridViewInfo.Rows[rowIndex].Cells[1].Value = status;//更新状态
dataGridViewInfo.Rows[rowIndex].Cells[1].Value = datStatus.isChoice;//更新状态
}
}
//需要接收的数据报文
“[{"Name":"AAA","Status":"A"},
{"Name":"BBB","Status":"AA"},
{"Name":"CCC","Status":"AAA"},
{"Name":"DDD","Status":"A"}
]”
创建List接收数据
private volatile List<DatStatus> stateInfo;
stateInfo = new List<DatStatus>();
class DatStatus
{
public string name;
public string status;
public Boolean isChoice;
}