socket.io 使用 Newtonsoft.json 和 socketIOClient 向 C# 发出
本文关键字:socketIOClient 发出 json io 使用 Newtonsoft socket | 更新日期: 2023-09-27 18:34:22
nodeJS:
io.sockets.on("connection",function(client)
{
client.emit('Value',{Data:'a string'});
});
C#:
socket.On("Value", (data) =>
{
PlainString PS = data.Json.GetFirstArgAs<PlainString>();
MessageBox.Show(PS.Data);
});
C# 纯字符串类:
[JsonObject(MemberSerialization.OptIn)]
class PlainString
{
[JsonProperty]
public string Data { get; set; }
public PlainString(){}
public string ToJsonString()
{
return JsonConvert.SerializeObject(this);
}
public static PlainString Deserialize(string jsonString)
{
return JsonConvert.DeserializeObject<PlainString>(jsonString);
}
}
错误:
不能将类型"对象"隐式转换为"纯字符串"。 存在显式转换(您是否缺少强制转换?
on JsonEncodedEventMessage.cs:39
public T GetFirstArgAs<T>()
{
try
{
var firstArg = this.Args.FirstOrDefault();
if (firstArg != null)
return JsonConvert.DeserializeObject<T>(firstArg.ToString());//line 39
}
catch (Exception ex)
{
throw;
}
return default(T);
}
firstArg = '{ "Data": "connected" }' (dynamic)
和 T = PlainString
使用: 套接字IO4Net
一切看起来都很好,但我总是收到那个错误,我错过了什么吗?
我不知道
那个库,但通常反序列化程序返回对象。
试试这个:
public static PlainString Deserialize(string jsonString)
{
return (PlainString)JsonConvert.DeserializeObject<PlainString>(jsonString);
}
从我的测试来看,看起来你只需要将 PlainString 类设置为公共。
[JsonObject(MemberSerialization.OptIn)]
public class PlainString
{
[JsonProperty]
public string Data { get; set; }
public PlainString() { }
public string ToJsonString()
{
return JsonConvert.SerializeObject(this);
}
public static PlainString Deserialize(string jsonString)
{
return JsonConvert.DeserializeObject<PlainString>(jsonString);
}
}
TestSocketIOClient 中有一个非常模拟的示例.cs在第 55 行 - 我也在其中展示了将数据作为 Part 对象获取。
// cast message as Part - use type cast helper
Part part = data.Json.GetFirstArgAs<Part>();
Console.WriteLine(" Part Level: {0}'r'n", part.Level);
吉姆