是什么导致了“args”:[...]数组与Json?

时间:2013-12-27 23:53:15

标签: javascript json socket.io

我在做:

function uploadFile(location,slides,name){

    var data = {
        slides: slides,
        name : name
    }

    io.sockets.in('conversionRoom').emit('selectSlides',data);

另一方面它出现了:

{
  "name": "selectSlides",
  "args": [
    {
      "slides": [
        "2",
        "4"
      ]
    }
  ]
}

我希望它是:

{
  "name": "selectSlides",
      "slides": [
        "2",
        "4"
      ]
}

这样它就可以适合我的架构。 导致“args”出现的原因是什么,以及如何让它消失?

我正在使用Socketio-4net

侦听C#中的emit
Program.socket.On("selectSlides", (fn2) =>
            {
                Program.toLog.Add("selectSlides hit");
                var jString = fn2.Json.ToJsonString();
                Program.toLog.Add(jString); 

            });

1 个答案:

答案 0 :(得分:0)

如果您使用socket io,请不要更改它。你可以在没有任何库的情况下自己将原始数据写入套接字,但是你不会拥有socket io的所有优点。

我不知道C#库是如何工作的,但也许它并没有为你拉出论据。


为什么?

嗯,我很确定这只是套接字io使用的传输模式。您需要将args放在他们自己的对象中,以便它们不会干扰其他键。例如,如果您有一个名为setName的活动期望name

,该怎么办?
{
    "name": "setName",
    "args": {
      "name": "Bob"
    }
}

鉴于这些信息,您想要构建的方式不起作用:

// wat?!
{
    "name": "setName",
    "name": "Bob"
}

因为事件的name和数据密钥name会发生冲突。

当你使用套接字io JS库时,他们会抽象这个,你将args传递给处理该事件的监听器。如果您只是听原始套接字,那么您将获得原始数据,并且必须自己完成。