using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static class JsonExtensions
public static IEnumerable<T> DeserializeObjects<T>(Stream stream, JsonSerializerSettings settings = null)
var reader = new StreamReader(stream);
return DeserializeObjects<T>(reader, settings);
public static IEnumerable<T> DeserializeObjects<T>(TextReader textReader, JsonSerializerSettings settings = null)
var ser = JsonSerializer.CreateDefault(settings);
var reader = new JsonTextReader(textReader);
reader.SupportMultipleContent = true;
if (reader.TokenType == JsonToken.None || reader.TokenType == JsonToken.Undefined || reader.TokenType == JsonToken.Comment)
yield return ser.Deserialize<T>(reader);
public string transcript { get; set; }
public double confidence { get; set; }
public List<Alternative> alternative { get; set; }
public bool final { get; set; }
public List<Result> result { get; set; }
public int result_index { get; set; }
internal static void Test()
var json = @"{""result"":[]}
{""transcript"":""hello Google how are you feeling"",""confidence"":0.96274596},
{""transcript"":""hello Google how are you today"",""confidence"":0.97388196},
{""transcript"":""hello Google how are you picking"",""confidence"":0.97388196},
{""transcript"":""hello Google how are you kidding"",""confidence"":0.97388196}
Console.WriteLine("Stream contents: ");
var HWR_Response = new HWR_Response(json);
TestDeserialization(HWR_Response);
TestLinqToJson(HWR_Response);
static void TestDeserialization(HWR_Response HWR_Response)
List<RootObject> results;
using (var stream = HWR_Response.GetResonseStream())
results = JsonExtensions.DeserializeObjects<RootObject>(stream).ToList();
var transcripts = results
.SelectMany(r => r.result)
.SelectMany(r => r.alternative)
.Select(a => a.transcript)
Console.WriteLine("Deserialized list of transcripts: ");
Console.WriteLine(JsonConvert.SerializeObject(transcripts, Formatting.Indented));
static void TestLinqToJson(HWR_Response HWR_Response)
using (var stream = HWR_Response.GetResonseStream())
objs = JsonExtensions.DeserializeObjects<JObject>(stream).ToList();
.SelectMany(o => o.SelectTokens("..transcript"))
.Select(t => t.ToString())
Console.WriteLine("LINQ-to-JSON parsed list of transcripts: ");
Console.WriteLine(JsonConvert.SerializeObject(transcripts, Formatting.Indented));
public HWR_Response(string json)
public Stream GetResonseStream()
var ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);