[英].net json deserializer failing for google api returned json result
在API調用期間,我無法反序列化從Google api獲得的json結果。 API請求成功,但是無法反序列化。
反序列化的代碼如下:
var datareceived = JsonConvert.DeserializeObject<RootObject>(response);
請在我從Google api獲取的json下面找到(上面代碼中的response對象):
{"result":[]}
{"result":[{"alternative":[{"transcript":"distance between the trees","confidence":0.46962094},{"transcript":"Justin prescription that reason"},{"transcript":"Justin Swift accessories"},{"transcript":"justice respiratory"},{"transcript":"Justin syska accessories"}],"final":true}],"result_index":0}
異常詳細信息:
Message = "Additional text encountered after finished reading JSON content: {. Path '', line 2, position 0."
RootObject類別:
public class RootObject
{
public List<Result> result { get; set; }
public int result_index { get; set; }
}
任何幫助將不勝感激!
您可以利用以下方法在列表中獲取JSON:
public List<string> GetJsonItems(string jsonString)
{
int bracketCount = 0;
List<string> jsonItems = new List<string>();
StringBuilder Json = new StringBuilder();
foreach (char c in jsonString)
{
if (c == '{')
++bracketCount;
else if (c == '}')
--bracketCount;
Json.Append(c);
if (bracketCount == 0 && c != ' ')
{
jsonItems.Add(Json.ToString());
Json = new StringBuilder();
}
}
return jsonItems;
}
然后像這樣利用它:
List<string> strings = GetJsonItems(response.Replace(Environment.NewLine, String.Empty));
if (strings.Length > 1)
{
List<Rootobject> allResultSet = new List<Rootobject>();
foreach (var str in strings)
{
Rootobject items = JsonConvert.DeserializeObject<Rootobject>(str);
if (items.result.Length > 0)
{
allResultSet.Add(items);
}
}
}
您只是無法解析此JSON,因為}
表示JSON的結尾
但是你可以做這樣的事情
string json = "{\"result\":[]}\r\n{\"result\":[{\"alternative\":[{\"transcript\":\"distance between the trees\",\"confidence\":0.46962094},{\"transcript\":\"Justin prescription that reason\"},{\"transcript\":\"Justin Swift accessories\"},{\"transcript\":\"justice respiratory\"},{\"transcript\":\"Justin syska accessories\"}],\"final\":true}],\"result_index\":0}";
string trueJson = json.Split(new[] { Environment.NewLine }, StringSplitOptions.None)[1];
try
{
RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(trueJson);
rootObject = rootObject;
}
catch (Exception ex)
{
throw;
}
public class Alternative
{
public string transcript { get; set; }
public double confidence { get; set; }
}
public class Result
{
public List<Alternative> alternative { get; set; }
public bool final { get; set; }
}
public class RootObject
{
public List<Result> result { get; set; }
public int result_index { get; set; }
}
結果的每一行似乎都包含一個單獨的JSON對象。 (尚不清楚API為何不返回實際的JSON數組。)在這種情況下,您可以將響應分為幾行,並分別解析每一行:
string[] lines = response.Split(new char[]{'\r','\n'},StringSplitOptions.RemoveEmptyEntries);
var datareceived1 = JsonConvert.DeserializeObject<RootObject>(lines[0]);
... 等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.