[英].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.