首页 >后端开发 >C++ >如何使用 Json.NET 将带有动态键的 JSON 反序列化为 C# 对象?

如何使用 Json.NET 将带有动态键的 JSON 反序列化为 C# 对象?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-19 19:31:09973浏览

How to Deserialize JSON with Dynamic Keys into a C# Object Using Json.NET?

在C#中处理动态键JSON反序列化

当接收具有动态键的JSON响应时,将其反序列化到具有预定义数据模型的C#对象可能会很棘手。本文讨论了一种特定场景,其中JSON响应包含具有动态键的对象。

以下JSON响应说明了这个问题:

<code>{
"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
}, 
}</code>

目标是将此JSON反序列化为Dataset对象的列表,这些对象具有name、group和description属性。

解决方案:使用Json.NET和字典

Json.NET提供了一种将具有动态键的JSON反序列化到C#对象的解决方案。通过使用JsonConvert.DeserializeObject<Dictionary<string, Dataset>>(json),您可以将JSON反序列化为一个字典,其中键是来自JSON响应的动态键,值是Dataset对象。

以下代码演示了此解决方案:

<code class="language-csharp">using Newtonsoft.Json;

...

// 将JSON反序列化到一个包含动态键和Dataset对象的字典中
var json = @"{
""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
}, 
}";
var datasetDictionary = JsonConvert.DeserializeObject<Dictionary<string, Dataset>>(json);

// 使用动态键作为字典键访问Dataset对象
foreach (var dataset in datasetDictionary.Values)
{
    Console.WriteLine($"Dataset: {dataset.name}, Group: {dataset.group}, Description: {dataset.description}");
}</code>

此解决方案允许您将具有动态键的JSON反序列化到C#对象,同时保留原始键值结构。

以上是如何使用 Json.NET 将带有动态键的 JSON 反序列化为 C# 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn