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

如何用C#处理Reader传递的JSON数组并映射属性至jobPreferencesEvent?

问题描述

我有如下格式的JSON数组:

[
   {
      "checked":true,
      "discipline":"Registered Nurse",
      "disciplineId":1,
      "specialty":"OR",
      "specialtyId":7
   },
   {
      "checked":true,
      "discipline":"Registered Nurse",
      "disciplineId":1,
      "specialty":"Ambulatory OR",
      "specialtyId":62
   },
   {
      "checked":true,
      "discipline":"Registered Nurse",
      "disciplineId":1,
      "specialty":"Pedi-OR",
      "specialtyId":101
   }
]

该JSON数据通过Reader传递,我希望用C#按照如下代码的逻辑,将JSON中的属性映射到jobPreferencesEvent的对应字段:

jobPreferencesEvent.preferred_discipline =
    reader["discipline"] != DBNull.Value ? reader["discipline"].ToString() : "0";

jobPreferencesEvent.preferred_specialty =
    reader["speciality"] != DBNull.Value ? reader["speciality"].ToString() : "0";

解决方案

1. 定义匹配的实体类

先创建和JSON结构对应的实体类,方便后续序列化/反序列化操作:

// 对应JSON单条数据的实体类
public class DisciplineSpecialty
{
    public bool Checked { get; set; }
    public string Discipline { get; set; }
    public int DisciplineId { get; set; }
    public string Specialty { get; set; }
    public int SpecialtyId { get; set; }
}

// 假设你的jobPreferencesEvent类结构如下
public class JobPreferencesEvent
{
    public string Preferred_Discipline { get; set; }
    public string Preferred_Specialty { get; set; }
}

2. 使用Newtonsoft.Json处理(需NuGet安装Newtonsoft.Json)

// 从Reader读取完整JSON字符串
string jsonContent = new StreamReader(reader).ReadToEnd();

// 将JSON反序列化为实体类列表
var disciplineItems = JsonConvert.DeserializeObject<List<DisciplineSpecialty>>(jsonContent);

// 映射字段(示例取数组第一个元素,需处理所有元素可加foreach循环)
var jobPreferencesEvent = new JobPreferencesEvent();
if (disciplineItems.Any())
{
    var targetItem = disciplineItems.First();
    // 按需求逻辑赋值,注意原代码里的"speciality"是拼写错误,JSON字段为"specialty"
    jobPreferencesEvent.Preferred_Discipline = !string.IsNullOrEmpty(targetItem.Discipline) ? targetItem.Discipline : "0";
    jobPreferencesEvent.Preferred_Specialty = !string.IsNullOrEmpty(targetItem.Specialty) ? targetItem.Specialty : "0";
}

3. 使用System.Text.Json处理(.NET Core/.NET 5+内置)

// 从Reader读取完整JSON字符串
string jsonContent = new StreamReader(reader).ReadToEnd();

// 将JSON反序列化为实体类列表
var disciplineItems = JsonSerializer.Deserialize<List<DisciplineSpecialty>>(jsonContent);

// 映射字段
var jobPreferencesEvent = new JobPreferencesEvent();
if (disciplineItems != null && disciplineItems.Any())
{
    var targetItem = disciplineItems.First();
    jobPreferencesEvent.Preferred_Discipline = !string.IsNullOrEmpty(targetItem.Discipline) ? targetItem.Discipline : "0";
    jobPreferencesEvent.Preferred_Specialty = !string.IsNullOrEmpty(targetItem.Specialty) ? targetItem.Specialty : "0";
}

注意事项

  • 原代码中的speciality是拼写错误,JSON对应的字段为specialty,映射时需使用正确名称。
  • 若需要处理JSON数组中的所有元素,可通过foreach循环遍历disciplineItems,逐个创建或更新JobPreferencesEvent实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:50:34