Я получил выходную строку с камеры, которая имеет формат по умолчанию: <Ticket><length>CR LF <Ticket><content>CR LF
Пример этого формата: <ticket=0010>L<length>CR LF<ticket=0010><unique message ID>:<JSON content>CR LF
Результат: 0010L000000045\r\n0010000500000:{"ID": 1034160761,"Index":1,"Name": "Pos 1"}\r\n
В общем, моя выходная строка содержит несколько предварительных объектов, а затем строку JSON. После того, как я запустил свою клиентскую часть и подключил ее к камере, которая работает на стороне сервера TCP / IP, я получил строку вывода камеры, которая была следующей: (0000L000000114 0000, 20) (24.380417; 13.144794; 62.600601; 51.364979; +0.491 ;; 59.664135; 77.126488; 97.884323; 115.346687; +0.464 ;;, 99) Здесь я всегда использовал, чтобы получить две строки, первая строка, по сравнению с форматом по умолчанию, имеет:
<Ticket><length>CR LF <Ticket>
а вторая строка размером 99 байтов должна содержать JSON в соответствии с форматом по умолчанию. Во второй строке строка указывает координаты x, y и z двух разных областей интереса, которые я хочу получить в целочисленном формате, потому что координаты x и y имеют угол, и я хочу найти координаты центра. Итак, для моего приложения интерес представляет только 2-я строка, поэтому я использовал этот код для удаления первой строки:
if (readByCount > 30)
{
var output = (new string(buff).TrimEnd('\u0000'), readByCount);
Debug.WriteLine(output);}
Так как первая строка имела размер менее 30 байт, она не отображалась. Я попытался разбить 2-ю строку сначала с помощью (;;), а затем с помощью (;) и сделать их целочисленным форматом, используя код:
public async void ReadDataAsync(TcpClient mClient)
{
try
{
StreamReader clientStreamReader = new StreamReader(mClient.GetStream());
char [] buff = new char[1024];
int readByCount = 0;
while (true)
{
readByCount = await clientStreamReader.ReadAsync(buff, 0, buff.Length);
Directory.CreateDirectory("Camera o3D1");
if (readByCount <= 0)
{
Console.WriteLine("Disconnected from Server.");
mClient.Close();
break;
}
if (readByCount > 30)
{
var output = new string(buff).TrimEnd('\u0000');
Debug.WriteLine(output);
var output1 = output.Split(new[] { ";;" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Split(';')
.Select(i => int.Parse(i)).ToArray()).ToArray();
Console.WriteLine(output1);
}
Array.Clear(buff, 0, buff.Length);
}
}
catch (Exception excp)
{
Console.WriteLine(excp.ToString());
}
}
Но я получаю сообщение об ошибке: входная строка не была в правильный формат.
Я попытался с помощью приведенного выше кода разбить нормальную строку, например строку text = "3; 4; 5; 6; 7 ;; 3; 4; 5; 6; 7 ;; 3; 4; 5; 6; 7 ;; 3; 4; 5; 6; 7 ;; 3; 4; 5; 6; 7 ;; "; и мне это удалось, но он не работает с JSON контентом. Я считаю, что метод, который работает с обычной строкой, не будет работать с содержимым JSON. Что мне нужно сделать, чтобы разделить каждый компонент JSON и изменить тип данных на целое, чтобы я мог выполнить некоторые математические операции с ним?