Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JSONObject中每个JSONnode的统一性_C#_Json_Node.js_Unity3d - Fatal编程技术网

C# JSONObject中每个JSONnode的统一性

C# JSONObject中每个JSONnode的统一性,c#,json,node.js,unity3d,C#,Json,Node.js,Unity3d,我正在使用Unity和Socket.IO以及NodeJS服务器,当一名玩家加入时,我需要向他发送其他玩家的信息,以便将他们添加到他的游戏中。服务器发送此json字符串: { "players":{ "/#3vd98L1t96vgMwRsAAAB":{ "name":"Player #2", "x":0, "y":0 }, "/#RaLyZw7Rnp94nDXkAAAF":{

我正在使用Unity和Socket.IO以及NodeJS服务器,当一名玩家加入时,我需要向他发送其他玩家的信息,以便将他们添加到他的游戏中。服务器发送此json字符串:

{  
   "players":{  
      "/#3vd98L1t96vgMwRsAAAB":{  
         "name":"Player #2",
         "x":0,
         "y":0
      },
      "/#RaLyZw7Rnp94nDXkAAAF":{  
         "name":"Player #6",
         "x":0,
         "y":0
      }
   }
}
但我不知道如何在unity中实现这一点? 我认为用它来制作一个物体是可行的,所以这就是我想到的:

JSONObject players = new JSONObject(e.data.GetField("players").ToString());

但是我怎样才能从中生成foreach循环呢?

您没有提到您正在使用的库。Unity在版本5.3中添加了本机
Jason
Serializer

将类转换为
Json
字符串:

string jsonString = JsonUtility.ToJson(className);
将Json字符串转换为类:

ClassName serializedPlayer = new ClassName();
serializedPlayer = JsonUtility.FromJson<ClassName>(jsonString);
ClassName serializedPlayer=new ClassName();
SerializedLayer=JsonUtility.FromJson(jsonString);

我提供的答案描述了如何使用arrayjson。这是一个漫长的过程,重新上市,但它是你正在寻找的。您应该阅读第二个解决方案,它说“2.多数据(数组JSON)

假设您的
e.DATA
是从您显示的JSON创建的,您可以执行以下操作:

var players = e.data.GetField("players");

for(int i = 0; i < players.list.Count; i++)
{
    string playerKey = (string)players.keys[i];
    JSONObject playerData = (JSONObject)players.list[i];
    // Process the player key and data as you need.
}

我这里没有问题,你能给我样品吗output@Devank我需要一个for-each循环来插入所有的播放器,这样每个循环都需要一个for-each循环:“/#3vd98l1t96vgmwrsaab”和:“/#RaLyZw7Rnp94nDXkAAAF”样本输出就是上面示例中的字符串:{“播放器”:{/#z91ltpng70y3giudaaa:{“名称”:“播放器#1”,“x”:0,“y”:0}}}感谢您快速简便的解决方案!它非常合身,很好用!非常感谢你@MennovanHout-为方便起见添加了一个扩展方法。谢谢您在@dbc中做了这么好的解释
public static class JSONObjectExtensions
{
    public static IEnumerable<KeyValuePair<string, JSONObject>> NameValuePairs(this JSONObject obj)
    {
        if (obj == null)
            throw new ArgumentNullException();
        if (obj.type != JSONObject.Type.OBJECT)
            throw new InvalidOperationException(string.Format("Incoming object type {0} is not JSONObject.Type.OBJECT.", obj.type));
        for (int i = 0; i < obj.list.Count; i++)
        {
            string key = (string)obj.keys[i];
            JSONObject j = (JSONObject)obj.list[i];
            yield return new KeyValuePair<string, JSONObject>(key, j);
        }
    }
}
foreach (var pair in players.NameValuePairs())
{
    // Process the player key and data as you need.
}