C# JSON数字键
很抱歉再次问这个问题,但我似乎不理解给出的答案:( 我需要使用JSON.net读取一些JSONC# JSON数字键,c#,json,C#,Json,很抱歉再次问这个问题,但我似乎不理解给出的答案:( 我需要使用JSON.net读取一些JSON "24h_rate":22.65826595," 当我把JSON放进我的类中时,它会使它变成无效的名称,总共24小时 我使用以下命令读取并反序列化JSON public class JsonWebClient { public async Task<System.IO.TextReader> DoRequestAsync(WebRequest req) {
"24h_rate":22.65826595,"
当我把JSON放进我的类中时,它会使它变成无效的名称,总共24小时
我使用以下命令读取并反序列化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);
}
}
公共类JsonWebClient
{
公共异步任务DoRequestAsync(WebRequest req)
{
var task=task.Factory.fromsync((cb,o)=>((HttpWebRequest)o)。BeginGetResponse(cb,o),res=>((HttpWebRequest)res.AsyncState)。EndGetResponse(res),req);
var结果=等待任务;
var resp=结果;
var stream=resp.GetResponseStream();
var sr=新系统IO.StreamReader(流);
返回sr;
}
公共异步任务getJsonAsync(字符串url)
{
HttpWebRequest req=HttpWebRequest.CreateHttp(url);
req.AllowreadStream缓冲=真;
var ret=等待数据同步(req);
var response=wait ret.ReadToEndAsync();
返回Newtonsoft.Json.JsonConvert.DeserializeObject(响应);
}
}
我需要做什么改变才能让这一切顺利进行
非常感谢。仔细研究一下,我发现由于某种原因,您使用的反序列化程序无法“处理”以数字开头的键名,即使它是完全有效的JSON(请检查) 如果你改成这个
{ "rate_24h":22.65826595 }
它的工作原理是:
public class RootObject
{
public double rate_24h { get; set; }
}
感谢@Ulugbek Umirov:
您的
rate\u 24h
属性应使用[JsonProperty(“24h\u rate”)]
作为JSON.NET反序列化的属性。您应该提到rate\u 24h
属性应使用[JsonProperty(“24h\u rate”)]
将由JSON.NET反序列化属性。感谢大家的帮助。我无法更改JSON,因为它来自一个我无法更改的设备。我如何“属性化属性”?抱歉,我是c#新手。