使用动态键将json反序列化为C#
Posted
技术标签:
【中文标题】使用动态键将json反序列化为C#【英文标题】:json deserialization to C# with dynamic keys [duplicate] 【发布时间】:2021-04-19 23:25:24 【问题描述】:对我的网络请求的响应如下(不受我控制):
"nasdaq_imbalance":
"name": "nasdaq_imbalance",
"group": "Market Data",
"description": null
,
"DXOpen IM":
"name": "DXOpen IM",
"group": "Daily",
"description": null
,
"Float Shares":
"name": "Float Shares",
"group": "Daily",
"description": null
,
不知何故,我需要将其反序列化为包含对象列表的 C# 对象... 基本上我需要一个这样的对象列表:
public class Dataset
public string name get; set;
public string group get; set;
public string description get; set;
【问题讨论】:
你可以去quicktype.io把你的json粘贴进去,它会生成类,和deser代码,甚至cmets告诉你如何使用它 @CaiusJard 可能不是最好的副本,因为 javascriptSerializer 已被弃用。 这就是 C# JSON Qs 的问题..太多重复..***.com/questions/25052293/… @CaiusJard 问题在于 SO。对我来说,输入这样的简短答案比尝试查找重复并希望版主在我标记它时真正看到它更容易。 更好的副本是How can I parse a JSON string that would cause illegal C# identifiers?。那里的答案是1)如果根对象属性名称不固定,请使用字典; 2) 如果根对象的属性名称是固定的,请使用属性标记为JsonPropertyAttribute
属性的根对象,例如[JsonProperty("DXOpen IM")] public Dataset DXOpenIM get; set;
.
【参考方案1】:
如果你使用Json.NET,你可以使用JsonConvert.DeserializeObject<Dictionary<string, Dataset>>(json)
,字典的键是nasdaq_imbalance
,DXOpen IM
,Float Shares
【讨论】:
我会尽快尝试,到目前为止,这是这里发布的最有希望的解决方案...顺便说一句,我在这里从 A 到 Z 搜索,但找不到类似的结构,因为它有点伪杰森跨度> 伟大的查理脸!从字典中,我可以轻松地列出列表...以上是关于使用动态键将json反序列化为C#的主要内容,如果未能解决你的问题,请参考以下文章