You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#反序列化JSON数组报错:无法展示州与城市列表的解决求助

问题解决方法

错误根源

你的JSON是数组结构(外层由[]包裹,包含多个州对象),但代码中尝试将其反序列化为单个Dictionary<string, object>对象,类型不匹配导致反序列化失败。

修复步骤

1. 定义实体类(可选但更规范)

先定义对应JSON结构的实体类,让数据操作更清晰:

public class StateCityModel
{
    public string State { get; set; }
    public List<string> City { get; set; }
}

2. 正确反序列化JSON数组

将整个JSON数组反序列化为实体列表(注意原代码中stateCities是空列表,需替换为实际的JSON字符串):

// 替换为你的实际JSON内容
string jsonData = @"[
  { ""State"": ""California"", 
    ""City"": 
      [""Los Angeles"", 
       ""San Diego"", 
       ""San Francisco"" 
      ]
   }, 
   { ""State"": ""Texas"", 
     ""City"": 
       [""Houston"", 
        ""San Antonio"", 
        ""Dallas""
       ]
    }
]";

// 反序列化数组为实体列表
var stateCityList = JsonConvert.DeserializeObject<List<StateCityModel>>(jsonData);

3. 转换为级联所需的字典

把列表转成以州名为键、城市列表为值的字典,适配级联下拉框需求:

var stateCityDict = stateCityList.ToDictionary(x => x.State, x => x.City);

4. 配置LookUpEdit级联逻辑

调整控件数据源配置,确保级联功能正常:

// 配置州下拉框:数据源为所有州名
lookUpEditState.Properties.DataSource = stateCityDict.Keys.ToList();
lookUpEditState.Properties.ValueMember = "ToString()";

// 配置城市下拉框的级联事件(若自动级联不生效,手动绑定)
lookUpEditState.EditValueChanged += (s, e) =>
{
    if (lookUpEditState.EditValue is string selectedState && stateCityDict.ContainsKey(selectedState))
    {
        lookUpEditCity.Properties.DataSource = stateCityDict[selectedState];
        lookUpEditCity.Properties.DisplayMember = "ToString()";
        lookUpEditCity.Properties.ValueMember = "ToString()";
    }
    else
    {
        lookUpEditCity.Properties.DataSource = null;
    }
};

关键注意事项

  • 原代码中stateCities是空的List<string>,这是无效的,必须传入实际的JSON字符串进行反序列化。
  • 州下拉框的数据源应是字典的键集合(州名列表),城市下拉框需根据选中的州动态切换数据源,而非直接绑定整个字典。

内容的提问来源于stack exchange,提问作者user21922946

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:48:26