使用 ID 作为名称从 JSON 创建强类型 C# 对象
当遇到像 JSON 对象这样的 API 响应时,其中 ID 数字用作数据的标识符,创建强类型 C# 对象来处理它们可能会很困难。让我们解决这个问题。
考虑以下 JSON 响应:
<code class="language-json">{ "5234592":{ "pollsAndSurveys":{ "questionsAsked":1, ... "pollCount":2}, "attendance":{ "averageAttendanceTimeSeconds":253, ... "percentageAttendance":100} }, "5235291":{ "pollsAndSurveys":{ "questionsAsked":2, ... "pollCount":0}, "attendance":{ "averageAttendanceTimeSeconds":83, ... "percentageAttendance":100} } }</code>
为了创建强类型对象,我们定义了:
<code class="language-csharp">public class AttendanceStatistics { [JsonProperty(PropertyName = "registrantCount")] public int RegistrantCount { get; set; } // 其他属性 } public class PollsAndSurveysStatistics { [JsonProperty(PropertyName = "pollCount")] public int PollCount { get; set; } // 其他属性 } public class SessionPerformanceStats { [JsonProperty(PropertyName = "attendance")] public AttendanceStatistics Attendance { get; set; } [JsonProperty(PropertyName = "pollsAndSurveys")] public PollsAndSurveysStatistics PollsAndSurveys { get; set; } } public class WebinarPerformanceStats { public List<SessionPerformanceStats> Stats { get; set; } }</code>
但是,我们面临一个问题:JSON 中的根对象与我们预期的 WebinarPerformanceStats
类型不匹配。
为了解决这个问题,我们可以使用字典作为根对象:
<code class="language-csharp">var dictionary = JsonConvert.DeserializeObject<Dictionary<string, SessionPerformanceStats>>(theJsonResponse);</code>
JSON.NET 有效地处理字典的序列化和反序列化,将属性名称转换为字典键。在这种情况下,ID 数字将被反序列化为字典键。如果您愿意,可以将它们声明为长整数:
<code class="language-csharp">var dictionary = JsonConvert.DeserializeObject<Dictionary<long, SessionPerformanceStats>>(theJsonResponse);</code>
通过这种方法,您现在可以将 JSON 响应反序列化为强类型的 Dictionary<string, SessionPerformanceStats>
或 Dictionary<long, SessionPerformanceStats>
,其中 ID 数字用作访问单个会话统计信息的键。
以上是如何用ID作为键从JSON创建强烈键入的C#对象?的详细内容。更多信息请关注PHP中文网其他相关文章!