C# JsonArray.Parse(…)错误

C# JsonArray.Parse(…)错误,c#,windows,json,windows-runtime,arrays,C#,Windows,Json,Windows Runtime,Arrays,我正在为Windows8开发一个新闻应用程序(用C#,XAML)。不幸的是,在异步下载JSON提要(通过验证)后,我遇到了一个奇怪的错误。下载成功,然后我想解析结果:var items=Windows.Data.JsonArray.parse(result) 运行代码时,出现以下错误: 位置0处的无效字符。和无效的JSON字符串。 Json.JsonArray是Microsoft的一个新库。我还尝试了Newtonsoft的JSON库,但出现了相同的错误。我做错了什么 这是完整的代码: // Re

我正在为Windows8开发一个新闻应用程序(用C#,XAML)。不幸的是,在异步下载JSON提要(通过验证)后,我遇到了一个奇怪的错误。下载成功,然后我想解析结果:
var items=Windows.Data.JsonArray.parse(result)

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

位置0处的无效字符。
无效的JSON字符串。

Json.JsonArray是Microsoft的一个新库。我还尝试了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)。我还尝试了在源代码中没有“[”和“]”的情况下使用它(没有效果)


谢谢大家!

我可以通过以下方式下载并解析结果:

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;
}
静态异步任务下载JSONASync(字符串url)
{
var client=新的HttpClient();
client.MaxResponseContentBufferSize=1024*1024;
var data=await client.GetByteArrayAsync(新Uri(url));
var encoding=encoding.UTF8;
var preamble=encoding.GetPreamble();
var content=encoding.GetString(数据,preamble.Length,data.Length-preamble.Length);
var result=JsonValue.Parse(内容);
返回结果;
}

响应中的BOM表显然没有正确处理,这导致解析器在开始时出现
'\xfeff'
字符。去掉序言并进行解析就可以了。否则,按原样解析会抛出一个
格式异常
,并显示一条消息:
遇到了意外的字符“ï”。

经过一点修改后,我就可以运行您的代码了。UTF8字符串的字节顺序标记似乎触发了Windows.Data.Json中JsonArray.Parse()的问题

在不使用额外编码的情况下解决此问题的一种方法是在readAsTringAsync()之后替换BOM字符,例如

或者更好

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

你能分享一个数据的例子吗?这是来自实验室的示例数据。他们在JSON字符串的开头和结尾添加了“[”和“]”(原因未知),并将其删除(请参见子字符串)。谢谢@casaout
[
]
的存在有一个很好的理由:响应是一个数组,这就是JSON中数组的外观。而您的
子字符串()
从开头删除一个字符,但不会从结尾删除任何内容。
if (result.Length > 1 && result[0] == '\xfeff'){
    result = result.Remove(0, 1);
}