使用动态键将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_imbalanceDXOpen IMFloat Shares

【讨论】:

我会尽快尝试,到目前为止,这是这里发布的最有希望的解决方案...顺便说一句,我在这里从 A 到 Z 搜索,但找不到类似的结构,因为它有点伪杰森跨度> 伟大的查理脸!从字典中,我可以轻松地列出列表...

以上是关于使用动态键将json反序列化为C#的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 字符串反序列化为多个 C# 对象

在 C# 中将 JSON 数组反序列化为对象

在 C# 中序列化为 JSON 并在 TS 中反序列化

使用 Json.net 将 JSON 对象反序列化为动态对象

无法将 JSON 字符串反序列化为 C# 对象

在将 JSON 反序列化为 C# 对象之前检查属性值