无法从REST GET请求读取JsonArray内的JSON值

hsgswve4  于 2023-03-20  发布在  其他
关注(0)|答案(4)|浏览(138)

GET调用REST API后,我得到了一个响应,如下所示:

[
    {
    "id": "ac:de:23:11:32:40",
    "type": "uwb",
    "name": "Employee tag 12",
    "sensors": "string",
    "fence_timeout": 5,
    "exit_tolerance": 0,
    "tolerance_timeout": 0,
    "exit_delay": 100,
    "properties": {}
  }
]

我只想知道“测试”这个名字。
出于测试的原因,我写了下面的小程序。但不幸的是,我不能访问“名称”。
有没有人能给予我最后一个提示让这个工作?或者有没有更好的方法来访问json值?

using Newtonsoft.Json;
using System.Net.Security;

public class Program
{
    public static void Main()
    {
        var obj = JsonConvert.DeserializeObject<List<Root>>(myJsonResponse);
        //string name = obj. ??????????????????
    }
}

public class MyArray
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

public class Root
{
    [JsonProperty("MyArray")]
    public List<MyArray> MyArray { get; set; }
}
ccrfmcuu

ccrfmcuu1#

你没有root属性,它只是一个数组。所以使用下面的代码

List<MyArray> listMyArray = JsonConvert.DeserializeObject<List<MyArray>>(myJsonResponse);

string name = listMyArray[0].Name;
cbwuti44

cbwuti442#

你需要在obj上迭代:

public class Program
{
    public static async Task Main()
    {
        var obj = JsonConvert.DeserializeObject<List<MyObject>>(content);

        foreach (var child in obj)
        {
            Console.WriteLine($"Id: {child.Id}");
            Console.WriteLine($"Name: {child.Name}");
        }
    }
}

public class MyObject
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("type")]
    public string Type { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    ...

    [JsonProperty("properties")]
    public Dictionary<string, string> Properties { get; set; }
}
wsxa1bj1

wsxa1bj13#

As per tripletex API 2.0 documentation 
your object should be 

> Blockquote

{"yourProperty":[{{
    "id": "ac:de:23:11:32:40",
    "type": "uwb",
    "name": "Employee tag 12",
    "sensors": "string",
    "fence_timeout": 5,
    "exit_tolerance": 0,
    "tolerance_timeout": 0,
    "exit_delay": 100,
    "properties": {}
  }}]}

> Blockquote

块引用变量数据=你的有效载荷.子对象().第一个或默认值(t =〉t.路径.等于(“你的属性”,字符串比较.顺序忽略大小写));变量列表=数据?.第一个.到对象();

dsf9zpds

dsf9zpds4#

如果列表总是包含1个元素,您可以轻松地实现这一点:
您正在将json对象反序列化为错误的类,应使用**List<MyArray>**

链接

这将使用Linq获取列表的第一个元素,或者它的默认值。

var obj =  JsonConvert.DeserializeObject<List<MyArray>>(myJsonResponse);
var name  = obj.FirstOrDefault()?.Name;

使用数组索引

这将使用Linq获取列表的第一个元素,或者它的默认值。

var obj =  JsonConvert.DeserializeObject<List<MyArray>>(myJsonResponse);
var name  = obj.[0]?.Name;

如果要从数组中选择所有名称,则可以用途:

var obj =  JsonConvert.DeserializeObject<List<MyArray>>(myJsonResponse);
var names = list.Select(c => c.Name)?.ToList() ?? new List<string>();

相关问题