在C#中解析JArray对象

时间:2016-08-19 07:06:51

标签: c# json.net

我有一个名为response的JArray对象,其值为:

{[
  {"alternatives": [
      {
       "transcript": "some text",
       "confidence": 0.77053386
      }
    ]
  },
  {"alternatives": [
      {
       "transcript": " some other text",
       "confidence": 0.84036005
      }
    ]
  }
]}

我正在尝试访问transcript值并将它们连接在一起。这是我的代码:

 var results = response.ToObject<IList<Alternatives>>();
 string mostConfidentTranscript = "";
 foreach (var r in results)
      mostConfidentTranscript += r.transcript + "\n";

Alternatives类定义为:

public class Alternatives
{
    public double confidence { get; set; }
    public string transcript { get; set; }
}

代码编译时没有错误,但results是一个空列表。我错过了什么?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

有效负载不正确,如果您的意思是发布对象列表,最好更改为:

{"value":[...]}

然后你可以将它读作JObject,并将值作为JArray。

using Newtonsoft.Json.Linq;

result = response.Content.ReadAsAsync<JObject>().Result;
var results = result["value"] as JArray;

答案 1 :(得分:0)

提供的JSON无效。稍作修改,这对我有用 -

public class Alternative
{
    public double confidence { get; set; }
    public string transcript { get; set; }
}

public class RootObject{
    public List<Alternative> Alternatives{get;set;}
}

var json = "[{'alternatives':[{'transcript':'some text','confidence':0.77053386}]},{'alternatives':[{'transcript':' some other text','confidence':0.84036005}]}]";
var res = JsonConvert.DeserializeObject<List<RootObject>>(json);
// output : "some text: some other text"
Console.WriteLine(res[0].Alternatives[0].transcript + ":" + res[1].Alternatives[0].transcript);