c# - 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
}
}
解决方案
问题来自 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
推荐阅读
- go - GO - binary.PutUvarint 当数值大于 127 时加 1
- python - 读取 xls 文件时出现 UnicodeDecodeError
- python - 使用我的号码从 Twilio 发送 whatsapp 按摩
- java - 使用 VpnService 的 Android http 隧道
- html - 网页与 html 不匹配
- haskell - 为什么我可以直接在 REPL 中从 typeclass 实例调用函数(比如从 Ord 进行比较)?
- python - 在 django 中使用两个匹配的外键时出错
- python - Python turtle 模块导致 OS X 崩溃
- macos - 使用 Applescript 在 Powerpoint 幻灯片中对齐照片
- java - SSL 连接问题 - 未发送所需的 SSL 证书