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#PlainString类:

[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);
   }
}


错误:


  无法将类型'object'隐式转换为'PlainString'。
  存在显式转换(您是否缺少演员表?)


在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

使用:SocketIO4Net
一切看起来都正确,但是我总是会收到该错误,我错过了什么吗?

最佳答案

我不知道该库,但通常反序列化器返回对象。

尝试这个:

public static PlainString Deserialize(string jsonString)
{
    return (PlainString)JsonConvert.DeserializeObject<PlainString>(jsonString);
}

09-16 22:54