我正在为 Windows 10 IoT 编写我的第一个 C# 应用程序。我的一切正常,我的网络请求等,我能够检索我想要的内容以呈现给用户。但是...它是 JSON 格式的,我无法将其视为常规变量,因此我只能选择一个属性。
JSON Result
{
"date":"2017-07-09",
"period":"year",
"views":970347,
"visitors":150013,
"likes":136,
"reblogs":13,
"comments":1099,
"followers":145
}
我尝试为 NewtonSoft JSON (JSON.NET) 添加 Nuget 包,但这似乎在 rPI 的 ARM CPU 上不起作用。所以我开始改用 Windows.Data.JSON.JsonObject
类。
我在这一行中使用 JSonObject.Parse()
为我的应用程序解析 JSON 响应,然后在调试时,我看到以下内容。
JsonObject meme = JsonObject.Parse(ResponseContent);
我可以在 meme 下看到我想要的所有值(value)观。 JSonObject 提供了 GetNamedString()
和 GetNamedObject()
方法,但我收到了这两种方法的终止错误:{"A method was called at an unexpected time.\r\n\r\n这不是字符串值。使用 ValueType 属性获取类型。"
我来自 PowerShell,我只是将响应转储到 $response
中,并使用 $Response.Views
提取键/值对,但我'我们不知道这在 C# 中应该如何工作。我真正不明白的是为什么它在解析后似乎仍保留在 JSON 中。
我的目标是将来自 JSON 的 Followers 和 Visitors 结果分配给一个变量,以便我以后可以引用它们。 webrequest 有效...我似乎无法解析 JSON。
最佳答案
Watch View 上的 JSON 实际上只是为了显示,但它已经是 JsonObject
类型,如 Type 列中所示。
这是说该方法将不起作用,因为您尝试提取的类型无法由 GetNamedString()
和 GetNamedObject()
处理。您还应该有一个 GetNamedValue()
方法来处理数字:
meme.GetNamedValue("views").GetNumber()
您还可以像这样通过索引访问值:
meme["views"].GetNumber()
如果你想确保它在返回的 JSON 值方面不会在边缘情况下失败,你可以使用 meme["whateverJSONkey"].ValueType
属性和开关/大小写防止异常
关于C# 针对 ARM : How to deserialize JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45003143/