【问题标题】:Parse nested values in C# dictionary [closed]解析 C# 字典中的嵌套值
【发布时间】:2026-01-19 07:10:01
【问题描述】:

我的 C# 应用程序具有以下 json,它被反序列化为分配给 values 的字典:

{
  "armSpan": 1.8081974983215332,
  "handPosition": {
    "x": 1.23,
    "y": 1.74,
    "z": 2.05,
  }
}

这是反序列化的代码:

var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(response);

我想将其中的数据分配给我的Size 模型中的各个字段。对于armSpan,我很高兴以下工作:

size.ArmSpan = decimal.Parse(values["armSpan"]);

我不确定如何获取 x、y 和 z 的值。应该是这样的

size.HandPosX = decimal.Parse(values["handPosition"]["x"]);

size.HandPosX = decimal.Parse(values["handPosition"].["x"]);

【问题讨论】:

标签: c# .net dictionary


【解决方案1】:

有在线转换器可以根据您的 json 生成 c# 代码(搜索“JSON to C#”)。使用其中之一,我根据您提供的 json 创建了这些类(删除了 '"z": 2.05,' 中的额外逗号):

public partial class ClassYouDeserializeTo
{
    [JsonProperty("armSpan")]
    public double ArmSpan { get; set; }

    [JsonProperty("handPosition")]
    public HandPosition HandPosition { get; set; }
}

public partial class HandPosition
{
    [JsonProperty("x")]
    public double X { get; set; }

    [JsonProperty("y")]
    public double Y { get; set; }

    [JsonProperty("z")]
    public double Z { get; set; }
}

你可以像这样使用它们:

var values = JsonConvert.DeserializeObject<ClassYouDeserializeTo>(response);

【讨论】:

  • HandPosition 属性应该是 Dictionary&lt;string, double&gt;Dictionary&lt;string, float&gt;Dictionary&lt;string, decimal&gt;
  • 如果是这样,json是错误的,没有括号表明它是一个列表。
  • 不是列表,而是字典。这:"handPosition": { "x": 1.23, "y": 1.74, "z": 2.05, } 定义了一个对象(如果您事先知道属性的名称,您当然可以使用类对象来描述它)或字典(如果您不知道)。尾随逗号(您不需要删除)建议将此对象作为字典处理(可能有更多名称:值对)。但是,如前所述,您可以不这样做。
  • 我不知道json中的字典这种方式。从来没有用过。我认为字典的保存方式与集合/列表/数组相同。