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 Class:
[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);
}
}
error:
Cannot implicitly convert type 'object' to 'PlainString'. An explicit conversion exists (are you missing a cast?)
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)
and
T = PlainString
using: SocketIO4Net
everything looks right, but i always get that error, am i missing something?
I don't know that library but usually Deserializers return object.
Try this:
public static PlainString Deserialize(string jsonString)
{
return (PlainString)JsonConvert.DeserializeObject<PlainString>(jsonString);
}
From my testing, it looks like you just need to set your PlainString class as public.
[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);
}
}
There is a very sim. sample in TestSocketIOClient.cs at line 55 - where I show getting the data as a Part object as well.
// cast message as Part - use type cast helper
Part part = data.Json.GetFirstArgAs<Part>();
Console.WriteLine(" Part Level: {0}\r\n", part.Level);
Jim