c# - 将 JSON 对象反序列化为动态对象
问题描述
我有一个无法反序列化的 json 对象。json 对象来自Alpaca Markets api/snapshots。我正在使用 Refit,但能够创建一个类集来读取它,所以我已经直接读取了 json 对象,但无法使用 newtonsoft.json 库重新序列化它。这是json对象;
{
"AAPL":{
"latestTrade":{
"t":"2021-09-17T20:25:51.020841773Z",
"x":"V",
"p":145.98,
"s":100,
"c":[
"@",
"T"
],
"i":12505,
"z":"C"
},
"latestQuote":{
"t":"2021-09-17T20:00:43.70526836Z",
"ax":"V",
"ap":0,
"as":0,
"bx":"V",
"bp":0,
"bs":0,
"c":[
"R"
],
"z":"C"
},
"minuteBar":{
"t":"2021-09-17T20:25:00Z",
"o":145.98,
"h":145.98,
"l":145.98,
"c":145.98,
"v":100,
"n":1,
"vw":145.98
},
"dailyBar":{
"t":"2021-09-17T04:00:00Z",
"o":148.75,
"h":148.78,
"l":145.765,
"c":146.09,
"v":1463230,
"n":12487,
"vw":146.742795
},
"prevDailyBar":{
"t":"2021-09-16T04:00:00Z",
"o":148.47,
"h":148.95,
"l":147.23,
"c":148.78,
"v":851556,
"n":7523,
"vw":148.174742
}
},
"MSFT":{
"latestTrade":{
"t":"2021-09-17T20:00:58.520078539Z",
"x":"V",
"p":300.16,
"s":100,
"c":[
"@",
"T"
],
"i":9410,
"z":"C"
},
"latestQuote":{
"t":"2021-09-17T20:00:00.000042133Z",
"ax":"V",
"ap":0,
"as":0,
"bx":"V",
"bp":0,
"bs":0,
"c":[
"R"
],
"z":"C"
},
"minuteBar":{
"t":"2021-09-17T20:00:00Z",
"o":300.16,
"h":300.16,
"l":300.16,
"c":300.16,
"v":100,
"n":1,
"vw":300.16
},
"dailyBar":{
"t":"2021-09-17T04:00:00Z",
"o":304.245,
"h":304.37,
"l":299.59,
"c":299.87,
"v":570598,
"n":9412,
"vw":300.820404
},
"prevDailyBar":{
"t":"2021-09-16T04:00:00Z",
"o":303.84,
"h":305.31,
"l":300.82,
"c":305.24,
"v":386250,
"n":6166,
"vw":303.325332
}
}
}
解决方案
试试这个,它已经过测试并且工作正常(使用 newtonsoft.json 库)
var json=...your json string;
var jD = JsonConvert.DeserializeObject<Dictionary<string,Aapl>>(json);
json=JsonConvert.SerializeObject(jD);
输出
{"AAPL":{"latestTrade":{"t":"2021-09-17T20:25:51.0208418+00:00","x":"V","p":145.98,"s":100,"c":["@","T"],"i":12505,"z":"C"},"latestQuote":{"t":"2021-09-17T20:00:43.7052684+00:00","ax":"V","ap":0,"as":0,"bx":"V","bp":0,"bs":0,"c":["R"],"z":"C"},"minuteBar":{"t":"2021-09-17T20:25:00+00:00","o":145.98,"h":145.98,"l":145.98,"c":145.98,"v":100,"n":1,"vw":145.98},"dailyBar":{"t":"2021-09-17T04:00:00+00:00","o":148.75,"h":148.78,"l":145.765,"c":146.09,"v":1463230,"n":12487,"vw":146.742795},"prevDailyBar":{"t":"2021-09-16T04:00:00+00:00","o":148.47,"h":148.95,"l":147.23,"c":148.78,"v":851556,"n":7523,"vw":148.174742}},"MSFT":{"latestTrade":{"t":"2021-09-17T20:00:58.5200785+00:00","x":"V","p":300.16,"s":100,"c":["@","T"],"i":9410,"z":"C"},"latestQuote":{"t":"2021-09-17T20:00:00.0000421+00:00","ax":"V","ap":0,"as":0,"bx":"V","bp":0,"bs":0,"c":["R"],"z":"C"},"minuteBar":{"t":"2021-09-17T20:00:00+00:00","o":300.16,"h":300.16,"l":300.16,"c":300.16,"v":100,"n":1,"vw":300.16},"dailyBar":{"t":"2021-09-17T04:00:00+00:00","o":304.245,"h":304.37,"l":299.59,"c":299.87,"v":570598,"n":9412,"vw":300.820404},"prevDailyBar":{"t":"2021-09-16T04:00:00+00:00","o":303.84,"h":305.31,"l":300.82,"c":305.24,"v":386250,"n":6166,"vw":303.325332}}}
班级
public partial class Aapl
{
[JsonProperty("latestTrade")]
public LatestTrade LatestTrade { get; set; }
[JsonProperty("latestQuote")]
public LatestQuote LatestQuote { get; set; }
[JsonProperty("minuteBar")]
public Bar MinuteBar { get; set; }
[JsonProperty("dailyBar")]
public Bar DailyBar { get; set; }
[JsonProperty("prevDailyBar")]
public Bar PrevDailyBar { get; set; }
}
public partial class Bar
{
[JsonProperty("t")]
public DateTimeOffset T { get; set; }
[JsonProperty("o")]
public double O { get; set; }
[JsonProperty("h")]
public double H { get; set; }
[JsonProperty("l")]
public double L { get; set; }
[JsonProperty("c")]
public double C { get; set; }
[JsonProperty("v")]
public long V { get; set; }
[JsonProperty("n")]
public long N { get; set; }
[JsonProperty("vw")]
public double Vw { get; set; }
}
public partial class LatestQuote
{
[JsonProperty("t")]
public DateTimeOffset T { get; set; }
[JsonProperty("ax")]
public string Ax { get; set; }
[JsonProperty("ap")]
public long Ap { get; set; }
[JsonProperty("as")]
public long As { get; set; }
[JsonProperty("bx")]
public string Bx { get; set; }
[JsonProperty("bp")]
public long Bp { get; set; }
[JsonProperty("bs")]
public long Bs { get; set; }
[JsonProperty("c")]
public string[] C { get; set; }
[JsonProperty("z")]
public string Z { get; set; }
}
public partial class LatestTrade
{
[JsonProperty("t")]
public DateTimeOffset T { get; set; }
[JsonProperty("x")]
public string X { get; set; }
[JsonProperty("p")]
public double P { get; set; }
[JsonProperty("s")]
public long S { get; set; }
[JsonProperty("c")]
public string[] C { get; set; }
[JsonProperty("i")]
public long I { get; set; }
[JsonProperty("z")]
public string Z { get; set; }
}
推荐阅读
- asp.net-core - 在生产中尝试通过 .net core 3.X 中的相对路径读取文件时出错
- javascript - 如何将已编辑的 .html 页面从 iFrame 保存到 ASP.NET Core 中的服务器?
- csv - 将带有标题的 csv 读入 Octave 中的数据结构
- c++ - 专门研究 std::vector 如何增长
- python - 从字典列表中删除具有特定 ID 的字典
- c++ - 使用二次公式的简单二次方程计算器
- excel - 是否可以使用系统时钟在 Excel VBA 中每 100 毫秒调用一次子程序?
- sympy - 使用 `replace` 将术语置于 sympy 的共同点下
- microsoft-graph-api - 如何使用 Microsoft Graph 统计用户数?
- javascript - 带有分页的可扩展嵌套 Angular 材料数据表未按预期工作?