JSON数字键

时间:2014-04-02 05:47:48

标签: c# json

很抱歉再次提出这个问题,但我似乎并不理解给定的答案:(

我需要使用JSON.net阅读一些JSON。一些键以数字开头,例如

"24h_rate":22.65826595,"

当我将JSON放入http://json2csharp.com/创建我的类时,它会进入__invalid_name__24h_total。

我正在使用以下内容来阅读和反序列化JSON

    public class JsonWebClient
{
    public async Task<System.IO.TextReader> DoRequestAsync(WebRequest req)
    {
        var task = Task.Factory.FromAsync((cb, o) => ((HttpWebRequest)o).BeginGetResponse(cb, o), res => ((HttpWebRequest)res.AsyncState).EndGetResponse(res), req);
        var result = await task;
        var resp = result;
        var stream = resp.GetResponseStream();
        var sr = new System.IO.StreamReader(stream);
        return sr;
    }

    public async Task<T> getJsonAsync<T>(string url)
    {
        HttpWebRequest req = HttpWebRequest.CreateHttp(url);
        req.AllowReadStreamBuffering = true;

        var ret = await DoRequestAsync(req);

        var response = await ret.ReadToEndAsync();

        return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(response);
    }
}

我需要做些什么来改变这项工作?

非常感谢。

1 个答案:

答案 0 :(得分:0)

稍微玩了一下我发现你正在使用的解串器无法处理&#39;由于某种原因以数字开头的键名,即使它是完全有效的JSON(使用http://jsonlint.com/检查)

如果您将其更改为

{ "rate_24h":22.65826595 }

它有效:

public class RootObject
{
    public double rate_24h { get; set; }
}

感谢@Ulugbek Umirov:

您的rate_24h属性应归属于[JsonProperty("24h_rate")],以便通过JSON.NET进行属性反序列化。