首页 > 解决方案 > Json 格式在 Unity 中使用简单的 json 似乎无效

问题描述

我想要做的是用.Net.WebSockets 获取一个Json 并用Simple Json 解析它,但是我面临错误“Json 格式似乎无效”。
起初我怀疑来自服务器的 json 可能是无效的,但经过一番调查后,我试图从文件而不是服务器中解析确切的 json,这没关系,所以我认为我的代码中一定有问题,但我不能似乎找到了(我是 websockets 的新手)。

 public async void StartMatch()
{
    await ConnectToServer();
    await SendMassage();
    FoundPlayer(await GetMassage());
}

 public void FoundPlayer(string oppInfo)
{
    Debug.Log(oppInfo);
    JSONNode node = JSON.Parse(oppInfo);

}

public async Task SendMassage()
{
    JSONNode node = JSON.Parse(json);
    node["data"]["categoryId"].AsInt = readyToPlay.id;
    string id = node.ToString();
    var encoded = Encoding.UTF8.GetBytes(id);
    var buffer = new ArraySegment<byte>(encoded, 0, encoded.Length);
    await Task.Run(() => ws.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None));
    Debug.Log("Sent");
}

public async Task<string> GetMassage()
{
    byte[] bufferSize = new byte[5000];
    var buffer = new ArraySegment<byte>(bufferSize, 0, bufferSize.Length);
    var results = await Task.Run(() => ws.ReceiveAsync(buffer, CancellationToken.None));
    string bufferResult = Encoding.Default.GetString(buffer.Array);
    wait.SetActive(false);
    Debug.Log("Received");
    return bufferResult;

}

如果你需要,这里是 Json。

{
   "action":"MatchStart",
   "message":{
      "opponentInfo":{
         "firstName":"James",
         "lastName":"Newell",
         "username":"JN",
         "image":null,
         "level":0,
         "cityName":null,
         "provinceName":null
      },
      "question":{
         "id":142570,
         "text":"کمپانی «گوگل» متعلق به کدام کشور میباشد؟",
         "image":"",
         "audio":"",
         "options":[
            {
               "id":715538,
               "option":"ایتالیا"
            },
            {
               "id":715536,
               "option":"آمریکا"
            },
            {
               "id":715539,
               "option":"بریتانیا"
            },
            {
               "id":715537,
               "option":"آلمان"
            }
         ]
      },
      "questionIndex":1,
      "questionsCount":7,
      "gameToken":"9d545d801bffe656a9140a877b050210",
      "validTime":10,
      "userId":75714
   }
}

标签: c#json.netunity3dwebsocket

解决方案


问题来自 GetMassage 函数我试图从缓冲区中提取 Json 导致无效 json 我不知道确切原因,试图通过此代码将 ReceiveAsync 分配给 WebSocketReceiveResult:

    public async Task<string> GetMassage()
{
    byte[] bufferSize = new byte[5000];
    var buffer = new ArraySegment<byte>(bufferSize, 0, bufferSize.Length);
    var results = await Task.Run(() => ws.ReceiveAsync(buffer, CancellationToken.None));
    string bufferResult = Encoding.Default.GetString(buffer.Array , buffer.Offset,results.Count);
    wait.SetActive(false);
    Debug.Log("Received");
    return bufferResult;

}

现在问题解决了,我不再得到无效的 json


推荐阅读