1

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はすべて正しく見えますが 、

常にそのエラーが発生します。何かが足りませんか?

4

2 に答える 2

3

そのライブラリはわかりませんが、通常、デシリアライザーはオブジェクトを返します。

これを試して:

public static PlainString Deserialize(string jsonString)
{
    return (PlainString)JsonConvert.DeserializeObject<PlainString>(jsonString);
} 
于 2012-05-17T13:00:58.627 に答える
0

私のテストから、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);

ジム

于 2012-05-19T18:03:12.750 に答える