我如何使用Xamarins System.JSON?

时间:2015-05-24 15:04:54

标签: c# json xamarin xamarin.ios system.json

我正在尝试将JSON字符串反序列化为对象。我在Xamarin中使用System.JSON库,这是我到目前为止所做的:

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失败并出现ERROR:JSON输入中的额外字符。在第1行,第642列。我尝试了data = data.Trim(),但这确实做了很多。

1 个答案:

答案 0 :(得分:0)

JamesMontemagno对他的链接是正确的。它向我展示了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);

我从Removing trailing nulls from byte array in C#

中窃取了一些代码