JsonArray.Parse(...)错误

cas*_*out 3 c# windows arrays json windows-runtime

我正在为Windows 8开发一个新闻应用程序(在C#,XAML中).不幸的是,我在异步下载JSON-Feed(通过http://jsonlint.com/验证)后遇到了一个奇怪的错误.下载成功,然后我想解析结果:var items = Windows.Data.JsonArray.Parse(result);.

当我运行代码时,我收到以下错误:

Invalid character at position 0. 和 Invalid JSON string.

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));
Run Code Online (Sandbox Code Playgroud)

此代码段来自Microsoft动手实验室(Contoso CookBook).我也尝试过没有源中的"["和"]"(没有效果)......

谢谢!

Jef*_*ado 6

我能够使用以下方法下载并解析结果:

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;
}
Run Code Online (Sandbox Code Playgroud)

显然没有正确处理响应中的BOM,这导致在'\xfeff'开始时杀死解析器的角色.剥离序言和解析读取正常.否则,将其解析为抛出一条FormatException消息:Encountered unexpected character 'ï'..