【问题标题】:Unexpected character encountered while parsing value:解析值时遇到意外字符:
【发布时间】:2016-02-24 06:44:16
【问题描述】:

我正在尝试使用 Steam 的 Web API 接收 JSON 并使用 JSON.Net 解析它。我只是硬编码一个我知道我会收到 JSON 的 URL。我运行它时遇到以下错误:

解析值时遇到意外字符:。路径'',行 0,位置 0。

错误指向我的控制器的第 22 行:

第 22 行:SteamResponse 响应 = JsonConvert.DeserializeObject(json);

这是我的课程:

public class Game
{
    public int appid { get; set; }
    public int playtime_forever { get; set; }
    public int? playtime_2weeks { get; set; }
}

public class SteamResponse
{
    public int game_count { get; set; }
    public List<Game> games { get; set; }
}

public class RootObject
{
    public SteamResponse response { get; set; }
}

我的控制器如下所示:

        List<Game> gameList = new List<Game>();

        WebClient wc = new WebClient();

        var json = wc.DownloadString("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=" + steamAPIKey + "&steamid=76561197994394917&format=json");

        SteamResponse response = JsonConvert.DeserializeObject<SteamResponse>(json);

我已经在浏览器中访问了该 URL 以验证它是否正确,并且我还使用 JSON Lint 测试了该 URL。我不确定我在这里做错了什么 - 我检查了其他主题并检查了他们列出的问题但没有找到它们。

Here is a link to the JSON I'm attempting to receive.

【问题讨论】:

    标签: json asp.net-mvc parsing json.net webclient


    【解决方案1】:

    您已经创建了一个RootObject 类型,但您没有在反序列化中使用它。你试过了吗:

    var root = JsonConvert.DeserializeObject<RootObject>(json);
    // access root.response;
    

    【讨论】:

    • 感谢您的快速回复。是的,我已经尝试过 RootObject,但我得到了同样的错误。
    • 可能是无效的流 API 密钥,您提供的 JSON 链接对我有用 - dotnetfiddle.net/2KP7HO
    • API 密钥在 JSON 链接的 URL 中,所以它一定是正确的吧?我什至将您的代码示例复制到我刚刚创建并运行它的本地控制台应用程序中 - 但遇到了同样的错误。我很困惑。
    • 您是否调试过您正在返回相同的 JSON 响应?
    • 好的,问题显然是我的连接。出于某种原因,webclient 不会在我的移动连接上提取 JSON - 我切换到不同的连接,这很好。它现在正在工作。我使用了错误的对象 - RootObject - 来解析也很重要,所以感谢您指出这一点。
    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多