将 JSON 对象映射到 C# 类属性数组
Posted
技术标签:
【中文标题】将 JSON 对象映射到 C# 类属性数组【英文标题】:Map JSON object to C# class property array 【发布时间】:2020-02-10 08:10:51 【问题描述】:JSON
"SoftHoldIDs": 444,
"AppliedUsages": [
"SoftHoldID": 444,
"UsageYearID": 223232,
"DaysApplied": 0,
"PointsApplied": 1
],
"Guests": [
1,
2
]
在上面的 JSON 中,SoftholdIDs 是整数,AppliedUsages 是 C# 模型中的类数组属性
问题是——我们如何将 JSON 映射到类属性。 类代码
public class ReservationDraftRequestDto
public int SoftHoldIDs get; set;
public int[] Guests get; set;
public AppliedUsage[] AppliedUsages get; set;
public class AppliedUsage
public int SoftHoldID get; set;
public int UsageYearID get; set;
public int DaysApplied get; set;
public int PointsApplied get; set;
尝试了下面的映射代码
ReservationDraftRequestDto reservationDto = null;
dynamic data = await reservationDraftRequestDto.Content.ReadAsAsync<object>();
reservationDto = JsonConvert.DeserializeObject<ReservationDraftRequestDto>(data.ToString());
【问题讨论】:
【参考方案1】:你需要改变
dynamic data = await reservationDraftRequestDto.Content.ReadAsAsync<object>();
到
string data = await reservationDraftRequestDto.Content.ReadAsStringAsync();
这会将您的响应读取为字符串
然后做
reservationDto = JsonConvert.DeserializeObject<ReservationDraftRequestDto>(data);
【讨论】:
不工作---执行函数时出现错误异常:Function1。 Newtonsoft.Json:无法将当前 JSON 对象(例如 "name":"value")反序列化为类型“testazfunction.AppliedUsage”,因为该类型需要 JSON 数组(例如 [1,2,3])才能正确反序列化。 要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为正常的 .NET 类型(例如,不是原始类型像整数,而不是可以从 JSON 对象反序列化的集合类型(如数组或 List这个作品
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
class Program
static void Main(string[] args)
string json = @"""SoftHoldIDs"": 444,""AppliedUsages"": [ ""SoftHoldID"": 444,""UsageYearID"": 223232,""DaysApplied"": 0,""PointsApplied"": 1],""Guests"": [ 1, 2]";
Rootobject reservationDto = JsonConvert.DeserializeObject<Rootobject>(json.ToString());
Debug.WriteLine(reservationDto.SoftHoldIDs);
foreach (var guest in reservationDto.Guests)
Debug.WriteLine(guest);
public class Rootobject
public int SoftHoldIDs get; set;
public Appliedusage[] AppliedUsages get; set;
public int[] Guests get; set;
public class Appliedusage
public int SoftHoldID get; set;
public int UsageYearID get; set;
public int DaysApplied get; set;
public int PointsApplied get; set;
首先使用visualstudio创建类复制json作为类。 接下来,您在 json 响应中有双引号,因此请处理它。 Json.NET: Deserilization with Double Quotes
【讨论】:
以上是关于将 JSON 对象映射到 C# 类属性数组的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 对象映射到 Azure 函数 API 请求类参数中的类
ElasticSearch 返回的嵌套属性未映射到 C# 类
C#:解析对具有 x 属性的类对象的非 JSON 仅数组 api 响应