【问题标题】:How do I use Xamarins System.JSON?如何使用 Xamarins System.JSON?
【发布时间】:2015-05-24 15:04:54
【问题描述】:

我正在尝试将 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: extra characters in JSON input。在第 1 行,第 642 列。我尝试了 data = data.Trim(),但这并没有做很多事情。

【问题讨论】:

  • 我会在这里看看stackoverflow.com/questions/9573119/…。对于任何 .NET 库,您都可以遵循 .NET 的标准 Microsoft 文档。
  • 了解您的 JSON 数据是什么样的会有所帮助

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


【解决方案1】:

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#窃取了那段代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多