问题描述
我正在为这个案子苦苦挣扎。 我从 NetworkStream 接收 JSON 格式的数据,并将其放入 StringBuilder:
buffer = new byte[client.ReceiveBufferSize];
bytesRead = s.Read(buffer,client.ReceiveBufferSize);
myCompleteMessage.AppendFormat("{0}",Encoding.UTF8.GetString(buffer,bytesRead));
在 myCompleteMessage 的内容下方(注意字符“~”):
"\"{\\\"id\\\": 0,\\\"contour\\\": [[[323,377]],[[230,479]],[[283,436]]],\\\"measureA\\\": 18.694646183289144,\\\"measureB\\\": 197.76944936476116,\\\"image\\\": \\\"iVBORw0KGgoAAAANSUhEUgAAAF4AAABnCAIAAAAGxWJcAAAgAElEQVR4AQHdcSKOAatVmwEBAQb+CQUFBQYGBgEBAQAF//7+/v3//vv7+/z2+gAAAP39/f39/QAC/wAAAAH/AAEBAf7+AAEBAQAAAAEBAQEDAP///wICAgAAAAIAAf7+/gEBAQAAAP4A/v7+/gMDAwAAAP0A/QAAAAAAAAAAAP0C/v///wAAAAEBAf8I//z8/P4F\\\"}~\"\"{\\\"id\\\": 4,\\\"contour\\\": [[[570,163]],[[585,169]],[[606,157]],[[599,153]],[[581,164]],[[577,160]],[[586,145]],[[608,151]],[[614,147]],[[583,140]]],\\\"measureA\\\": 37.742413753208304,\\\"measureB\\\": 65.91583997176758,\\\"image\\\": \\\"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAeCAIAAAA3lgDOAAAP+0lEQVRIDQHwDw/wAW53bfr6+v7+/vv7+/r6+vv7+/v4/fz8/Pz//vv7+/z9AAAAAP39/cK4uwAAAAAAAAAAAAAAAAAAAC83NwUCAfz8/AQAAQEBAfr8/P////3//v7+/v/9/gEBAQD8/QAAAPv//v///wEDAv39/QD//v/////6/AAAAP7+/v7+/v4A/wICAgAAAQQYGBj39/f7+/v4+Pj9/f3+/v718vf29vb/AgH8/Pz6+/60qq0AAABMVlP//f3///8A/f/7+/v7/v/RyckAAAAAAAA8PT0AAAAEBgb9/f36/PsBAQEB/wD9/f3/AfwCAgIEAQD9/f39//4EBAT//v38/PwCBgL+/v7/////////AQAAAAD9/f4ECQwHBAcCAAAA/v7++vr69/f3Af//AwT/+vz+/f0DBQQBAAAAWWNgFhYWAgAB/Pz8/vv8+/v7/wIDUlpa+fn3+/v7xMPDAAAAAAAAAAAAOEBAAAAAAPv9AAAAA=\\\"}"
现在,我在匹配字符“~”的上方拆分此字符串:
var jsonList = myCompleteMessage.ToString().Split('~');
通过 foreach 循环,我将 myCompleteMessage 中的 JSON 字符串元素传递给 SimpleJSON 解析器并执行一些操作:
foreach (string jsonRow in jsonList)
{
JSONNode data = JSONNode.Parse(jsonRow);
do something
}
但是解析器返回一个异常,告诉字符串不是 JSON 格式。
我错在哪里?
上面显示的 myCompleteMessage
的值与 Visual Studio 显示的一样。当我 click on the magnifier glass 或执行 Debug.WriteLine(myCompleteMessage)
时,我看到:
没有放大镜可以点击,然后我点击了jsonlist变量上的放大镜。内容下方:
"{\"id\": 0,\"contour\": [[[323,\"measureA\": 18.694646183289144,\"measureB\": 197.76944936476116,\"image\": \"iVBORw0KGgoAAAANSUhEUgAAAF4AAABnCAIAAAAGxWJcAAAgAElEQVR4AQHdcSKOAatVmwEBAQb+CQUFBQYGBgEBAQAF//7+/v3//vv7+/z2+gAAAP39/f39/QAC/wAAAAH/AAEBAf7+AAEBAQAAAAEBAQEDAP///wICAgAAAAIAAf7+/gEBAQAAAP4A/v7+/gMDAwAAAP0A/QAAAAAAAAAAAP0C/v///wAAAAEBAf8I//z8/P4F/hUVFQI4BxYWFv8E+vj4+Pn77gEBAf8DBAcHBwYNCgYGBgUCBgAAAPsB+Pv7+/f49Pb29vsB9f7+/gAAAPz8/Pn+9P7+/gAAAAAAAP4B/AAAAAEBAf7+/gQBAgAAAAAAAAMDA/4ABAMDAwACAf///wD+AgAAAAAAAP////79AP7+/vv7/WBLeQAAAAAAAAAAAAAAAAT+/v4EBAQEBAQEBAQAAf4CAwP9/wH//wEB/wIB/wL///8AAAD+//8AAQH+/f////8CAQECAgEAAP8BAQEAAAD///8BAAEAAAD+/v4BAQEAAQEAAAAAAgH///8A/wABAQEAAAD/////AP8BAQECAgL///////////////8BAQH//P4DAQID/gP17vX75fQF/AQEEAD////+AwACAgEFBQgEBAYDAAQEAQX/AQAAAAD+/v35+fj8/Pj+/vr+A/3/Af/+/v7+AP0AAP7///0AAAACAgIAAP4AAAD+/v8BAQEAAAD///8BAQP//wH/AP/+/v4B/wEBAQH+//8BAQH//////////wL8/P5gS3mWq38E/QsKCgoMCxBQQ1wEAgICAAAA/v7+AQEBAwMCBAQE///+/////f39+/v7AgIC/f39////AAAAAAAAAAAAAQEBAAAAAwMD////////AgICAAD/AAAAAAAA////AAEA/////v39AAAAAQEAAAAA"}
解决方法
JSON 格式不正确
using Newtonsoft.Json.Linq;
namespace ConsoleApp22
{
class Program
{
static void Main(string[] args)
{
try
{
string json = "\"{\\\"id\\\": 0,\\\"contour\\\": [[[323,377]],[[230,479]],[[283,436]]],\\\"measureA\\\": 18.694646183289144,\\\"measureB\\\": 197.76944936476116,\\\"image\\\": \\\"iVBORw0KGgoAAAANSUhEUgAAAF4AAABnCAIAAAAGxWJcAAAgAElEQVR4AQHdcSKOAatVmwEBAQb+CQUFBQYGBgEBAQAF//7+/v3//vv7+/z2+gAAAP39/f39/QAC/wAAAAH/AAEBAf7+AAEBAQAAAAEBAQEDAP///wICAgAAAAIAAf7+/gEBAQAAAP4A/v7+/gMDAwAAAP0A/QAAAAAAAAAAAP0C/v///wAAAAEBAf8I//z8/P4F\\\"}~\"\"{\\\"id\\\": 4,\\\"contour\\\": [[[570,163]],[[585,169]],[[606,157]],[[599,153]],[[581,164]],[[577,160]],[[586,145]],[[608,151]],[[614,147]],[[583,140]]],\\\"measureA\\\": 37.742413753208304,\\\"measureB\\\": 65.91583997176758,\\\"image\\\": \\\"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAeCAIAAAA3lgDOAAAP+0lEQVRIDQHwDw/wAW53bfr6+v7+/vv7+/r6+vv7+/v4/fz8/Pz//vv7+/z9AAAAAP39/cK4uwAAAAAAAAAAAAAAAAAAAC83NwUCAfz8/AQAAQEBAfr8/P////3//v7+/v/9/gEBAQD8/QAAAPv//v///wEDAv39/QD//v/////6/AAAAP7+/v7+/v4A/wICAgAAAQQYGBj39/f7+/v4+Pj9/f3+/v718vf29vb/AgH8/Pz6+/60qq0AAABMVlP//f3///8A/f/7+/v7/v/RyckAAAAAAAA8PT0AAAAEBgb9/f36/PsBAQEB/wD9/f3/AfwCAgIEAQD9/f39//4EBAT//v38/PwCBgL+/v7/////////AQAAAAD9/f4ECQwHBAcCAAAA/v7++vr69/f3Af//AwT/+vz+/f0DBQQBAAAAWWNgFhYWAgAB/Pz8/vv8+/v7/wIDUlpa+fn3+/v7xMPDAAAAAAAAAAAAOEBAAAAAAPv9AAAAA=\\\"}";
JObject test = JObject.Parse(json);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
输出:
从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:字符串。路径 '',第 1 行,位置 400。
,
试试这个代码
try
{
string json = myCompleteMessage;
dynamic data = JObject.Parse(json);
Console.WriteLine(data.id);
Console.WriteLine(data.contour);
Console.WriteLine(data.measureA);
Console.WriteLine(data.measureB);
Console.WriteLine(data.image);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}