JsonArray.Parse(…)错误

我正在开发Windows 8的新闻应用程序(使用C#,XAML)。 不幸的是,我在asynchronous下载JSON-Feed(用http://jsonlint.com/validation)后遇到了一个奇怪的错误。 下载成功,然后我想parsing结果: var items = Windows.Data.JsonArray.Parse(result);

当我运行代码时,出现以下错误:

Invalid character at position 0.Invalid JSON string.

Json.JsonArray是来自微软的新图书馆。 我也尝试了Newtonsoft的JSON库和相同的错误。 我究竟做错了什么?

这是完整的代码:

 // Retrieve recipe data from Azure var client = new HttpClient(); client.MaxResponseContentBufferSize = 1024*1024; // Read up to 1 MB of data var response = await client.GetAsync(new Uri("http://contosorecipes8.blob.core.windows.net/AzureRecipes")); var result = await response.Content.ReadAsStringAsync(); // Parse the JSON recipe data var recipes = JsonArray.Parse(result.Substring(1, result.Length - 1)); 

此代码片段来自Microsoft动手实验室(Contoso CookBook)。 我也尝试过,没有“[”和“]”的来源(没有效果)…

谢谢!

Solutions Collecting From Web of "JsonArray.Parse(…)错误"

我经过小小的修改就可以运行你的代码。 UTF8字符串的字节顺序标记似乎从Windows.Data.Json的JsonArray.Parse()触发问题。

解决这个问题的一个方法就是在ReadAsStringAsync()之后替换BOM字符,例如

 result = result.Replace('\xfeff', ' '); 

或更好

 if (result.Length > 1 && result[0] == '\xfeff'){ result = result.Remove(0, 1); } 

我能够使用下载和解析结果罚款:

 static async Task<JsonValue> DownloadJsonAsync(string url) { var client = new HttpClient(); client.MaxResponseContentBufferSize = 1024 * 1024; var data = await client.GetByteArrayAsync(new Uri(url)); var encoding = Encoding.UTF8; var preamble = encoding.GetPreamble(); var content = encoding.GetString(data, preamble.Length, data.Length - preamble.Length); var result = JsonValue.Parse(content); return result; } 

响应中的BOM显然没有被正确处理,导致在开始时有一个'\xfeff'字符会'\xfeff'解析器。 剥离前导码和解析读取正常。 否则,解析它是抛出一个FormatException与消息: Encountered unexpected character 'ï'.