从动态JsonConvert.DeserializeObject数组中获取第一个元素

3
我有这样的 JSON 字符串输出:
字符串 apiResult =
{
   "error":[],
   "result":{
      "RARAGA":{
         "a":["4","1","1.1"],
         "b":["4","1","2"],
         "c":["1","2"],
         "v":["4","4"],
         "p":["5","2"],
         "t":[1],
         "l":["3","4"],
         "h":["5","7"],
         "o":"8"
      }
   }
}

我想要做的是使用Newtonsoft.Json进行转换:
dynamic result = JsonConvert.DeserializeObject(apiResult);

只需将“RARAGA”属性的这个结果作为对象,以便我可以取出它的值a/b/c等。我只需要像这样取出它的值:
result.result.RARAGA.a[0]

这段文字的意思是:

关键在于这个字符串 "RARAGA" 总是随机的


在您提供的示例中,RARAGA 不是数组的元素,而是属性。请检查示例 JSON。 - ASpirin
对不起,我的错。无论如何,我无法访问它。 - borewik
4个回答

4
如果您不知道属性的名称(或想迭代所有属性),则可以使用JObject
JObject result = JsonConvert.DeserializeObject<JObject>(apiResult);
dynamic res = result["result"].First().First;

res将包含第一个对象的值作为动态变量。


非常感谢。我几乎接近了答案(发现要使用JObject),但是您的两行代码看起来更好。再次感谢! - borewik

1
如果您使用http://json2csharp.com/#,那么以下应该是您应该将JSON字符串反序列化为的模型。
public class RARAGA
{
    public List<string> a { get; set; }
    public List<string> b { get; set; }
    public List<string> c { get; set; }
    public List<string> v { get; set; }
    public List<string> p { get; set; }
    public List<int> t { get; set; }
    public List<string> l { get; set; }
    public List<string> h { get; set; }
    public string o { get; set; }
}

public class Result
{
    public RARAGA RARAGA { get; set; }
}

public class RootObject
{
    public List<object> error { get; set; }
    public Result result { get; set; }
}

所以你的反序列化将变成:
RootObject result = JsonConvert.DeserializeObject<RootObject>(apiResult);

然后你可以像这样访问它:
result.result.RARAGA.a[0]

通常我会这样做,但是这里的“RARAGA”总是一个随机不同的字符串。 - borewik

0

试试这个

result.result[0]["a"][0]

使用 result[0] 代替 result.RARAGA


很遗憾,无法工作“使用无效的键值访问JObject值:0。需要对象属性名称。” - borewik

0
使用Rahul的答案中的类并将 (与ASpirin的答案类似)转换为:
public class RARAGA
{
    public List<string> a { get; set; }
    public List<string> b { get; set; }
    public List<string> c { get; set; }
    public List<string> v { get; set; }
    public List<string> p { get; set; }
    public List<int> t { get; set; }
    public List<string> l { get; set; }
    public List<string> h { get; set; }
    public string o { get; set; }
}

JObject loObject = JObject.Parse(apiResult);
RARAGA loRARAGA = loObject["result"].First.First.ToObject<RARAGA>();
Console.WriteLine(loRARAGA.a[0]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接