从 json 对象创建一个以 ID 为名称的强类型 c# 对象

Create a strongly typed c# object from json object with ID as the name(从 json 对象创建一个以 ID 为名称的强类型 c# 对象)
本文介绍了从 json 对象创建一个以 ID 为名称的强类型 c# 对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在尝试将 API 用于知名的在线会议提供商.他们的其中一个 API 调用返回一个如下所示的对象.

I am trying to make use of the API for a well known online meeting provider. One of their API calls returns an object that looks like this.

{
    "5234592":{
    "pollsAndSurveys":{
        "questionsAsked":1,
        "surveyCount":0,
        "percentageSurveysCompleted":0,
        "percentagePollsCompleted":100,
        "pollCount":2},
    "attendance":{
        "averageAttendanceTimeSeconds":253,
        "averageInterestRating":0,
        "averageAttentiveness":0,
        "registrantCount":1,
        "percentageAttendance":100}
    },
    "5235291":{
    "pollsAndSurveys":{
        "questionsAsked":2,
        "surveyCount":0,
        "percentageSurveysCompleted":0,
        "percentagePollsCompleted":0,
        "pollCount":0},
    "attendance":{
        "averageAttendanceTimeSeconds":83,
        "averageInterestRating":0,
        "averageAttentiveness":0,
        "registrantCount":1,
        "percentageAttendance":100}
    }
}

我正在尝试在 C# 中创建一个强类型对象,以便处理这些数据.我可以为 pollsAndSurveys 位和出勤位创建对象,但我不知道如何处理 id 号,在本例中为 5234592 &5235291,即会话的标识符.

I am trying to make a strongly typed object in C# so I can deal with this data. I can create objects for the pollsAndSurveys bit and the attendance bit but I don't know how to deal with the id number, in this case 5234592 & 5235291, that is the identifier for the session.

public class AttendanceStatistics
{
    [JsonProperty(PropertyName = "registrantCount")]
    public int RegistrantCount { get; set; }

    [JsonProperty(PropertyName = "percentageAttendance")]
    public float PercentageAttendance{ get; set; }

    [JsonProperty(PropertyName = "averageInterestRating")]
    public float AverageInterestRating { get; set; }

    [JsonProperty(PropertyName = "averageAttentiveness")]
    public float AverageAttentiveness { get; set; }

    [JsonProperty(PropertyName = "averageAttendanceTimeSeconds")]
    public float AverageAttendanceTimeSeconds { get; set; }
}

public class PollsAndSurveysStatistics
{
    [JsonProperty(PropertyName = "pollCount")]
    public int PollCount { get; set; }

    [JsonProperty(PropertyName = "surveyCount")]
    public float SurveyCount { get; set; }

    [JsonProperty(PropertyName = "questionsAsked")]
    public int QuestionsAsked { get; set; }

    [JsonProperty(PropertyName = "percentagePollsCompleted")]
    public float PercentagePollsCompleted { get; set; }

    [JsonProperty(PropertyName = "percentageSurveysCompleted")]
    public float PercentageSurveysCompleted { 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; }
}

我很确定 WebinarPerformanceStats 是问题所在,但我不知道从哪里开始.我必须改变什么才能得到

I am pretty sure that the WebinarPerformanceStats is the issue but I don't know where to go from here. What would I have to change to get

NewtonSoft.Json.JsonConvert.DeserializeObject<WebinarPerformanceStats>(theJsonResponse)

上班?

推荐答案

让你的根对象成为字典:

Make your root object be a dictionary:

var dictionary = JsonConvert.DeserializeObject<Dictionary<string, SessionPerformanceStats>>(theJsonResponse);

Json.NET 将字典从 JSON 对象序列化到 JSON 对象,并将键转换为属性名称.在您的情况下,ID 号将被反序列化为字典键.如果您确定它们将始终是数字,则可以这样声明它们:

Json.NET serializes a dictionary from and to a JSON object, with the keys being converted to the property names. In your case, the ID numbers will be deserialized as the dictionary keys. If you are sure they will always be numbers, you could declare them as such:

var dictionary = JsonConvert.DeserializeObject<Dictionary<long, SessionPerformanceStats>>(theJsonResponse);

参见序列化字典和反序列化字典

这篇关于从 json 对象创建一个以 ID 为名称的强类型 c# 对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Force JsonConvert.SerializeXmlNode to serialize node value as an Integer or a Boolean(强制 JsonConvert.SerializeXmlNode 将节点值序列化为整数或布尔值)
Using JSON to Serialize/Deserialize TimeSpan(使用 JSON 序列化/反序列化 TimeSpan)
Could not determine JSON object type for type quot;Classquot;(无法确定类型“Class的 JSON 对象类型.)
How to deserialize a JSONP response (preferably with JsonTextReader and not a string)?(如何反序列化 JSONP 响应(最好使用 JsonTextReader 而不是字符串)?)
how to de-serialize JSON data in which Timestamp it-self contains fields?(如何反序列化时间戳本身包含字段的JSON数据?)
JSON.Net custom contract serialization and Collections(JSON.Net 自定义合约序列化和集合)