Как мне использовать Xamarins System.JSON?
Я пытаюсь десериализовать строку JSON в объект. Я использую библиотеку System.JSON в Xamarin, и это то, что я до сих пор:
ServerConnection.Receive (bb);
data = Encoding.ASCII.GetString (bb);
try{
MemoryStream stream = new MemoryStream(bb);
JsonValue jsonCounters = JsonObject.Load(stream);
}
catch(Exception error){
Console.WriteLine ("ERROR: " + error.Message);
}
У меня проблема в том, что jsonCounters всегда нулевой. Я понимаю, что JSON.NET - лучшая библиотека, но для ее использования потребуется обновить мою учетную запись, и я пока еще не готов сделать это.
РЕДАКТИРОВАТЬ:
Я перешел по ссылке, предоставленной JamesMontemagno. Затем я написал следующее в моем приложении:
ServerConnection.Receive (bb);
data = Encoding.ASCII.GetString (bb);
try{
JsonValue value = JsonValue.Parse(data);
JsonObject jsonCounters = value as JsonObject;
}
catch(Exception error){
Console.WriteLine ("ERROR: " + error.Message);
}
Единственная проблема заключается в том, что когда я создаю байтовый массив, который я получаю, я делаю:
byte[] bb = new byte[1024]
и проблема заключается в том, что когда я получаю и пытаюсь проанализировать JSON, кажется, что разница между длиной JSON и длиной байтового массива не теряется, он просто преобразуется в пробел в конце JSON, что приводит к JsonValue.Parse для сбоя с ошибкой: дополнительные символы во входных данных JSON. В строке 1, столбец 642. Я попытался data = data.Trim(), но это ничего не сделало.
1 ответ
Джеймс Монтеманьо был прав со своей ссылкой. Это показало мне правильное использование JsonObject. После того, как я смог заставить Json хотя бы попытаться разобрать, мне нужно было удалить оставшиеся пробелы. Я сделал это с помощью следующего кода для создания нового байтового массива, который будет анализировать.
ServerConnection.Receive (rawRecieve);
int i = rawRecieve.Length - 1;
while (rawRecieve [i] == 0) {
--i;
}
byte[] cleanRecieve = new byte[i+1];
Array.Copy(rawRecieve, cleanRecieve, i+1);
Я украл этот бит кода из: Удаление завершающих нулей из байтового массива в C#