使用C#反序列化Telnyx API返回的含嵌套payload的JSON对象
C# 处理Telnyx API嵌套JSON反序列化方案
你需要按照JSON的层级结构分层定义对应的C#类,嵌套的payload字段只需单独定义一个Payload类,作为Data类的属性类型即可。
第一步:定义各层级C#类
以下是适配两种常用JSON库的类定义:
使用.NET内置System.Text.Json的类定义
// 最外层根对象 public class TelnyxWebhookResponse { [JsonPropertyName("data")] public TelnyxEventData Data { get; set; } [JsonPropertyName("meta")] public TelnyxEventMeta Meta { get; set; } } // data字段对应的类 public class TelnyxEventData { [JsonPropertyName("event_type")] public string EventType { get; set; } [JsonPropertyName("id")] public string Id { get; set; } [JsonPropertyName("occurred_at")] public DateTime OccurredAt { get; set; } // 嵌套的payload直接用单独定义的Payload类作为类型 [JsonPropertyName("payload")] public TelnyxFaxPayload Payload { get; set; } [JsonPropertyName("record_type")] public string RecordType { get; set; } } // payload字段对应的类 public class TelnyxFaxPayload { [JsonPropertyName("call_duration_secs")] public int CallDurationSecs { get; set; } [JsonPropertyName("connection_id")] public string ConnectionId { get; set; } [JsonPropertyName("direction")] public string Direction { get; set; } [JsonPropertyName("fax_id")] public string FaxId { get; set; } [JsonPropertyName("from")] public string From { get; set; } [JsonPropertyName("media_url")] public string MediaUrl { get; set; } [JsonPropertyName("page_count")] public int PageCount { get; set; } [JsonPropertyName("partial_content")] public bool PartialContent { get; set; } [JsonPropertyName("status")] public string Status { get; set; } [JsonPropertyName("to")] public string To { get; set; } [JsonPropertyName("user_id")] public string UserId { get; set; } } // meta字段对应的类 public class TelnyxEventMeta { [JsonPropertyName("attempt")] public int Attempt { get; set; } [JsonPropertyName("delivered_to")] public string DeliveredTo { get; set; } }
如果你使用的是Newtonsoft.Json(Json.NET),只需把所有[JsonPropertyName("xxx")]特性替换为[JsonProperty("xxx")]即可。
第二步:执行反序列化
System.Text.Json 反序列化代码示例
// jsonStr为你获取的API响应JSON字符串 var response = JsonSerializer.Deserialize<TelnyxWebhookResponse>(jsonStr); // 可直接访问payload内的字段 var faxMediaUrl = response.Data.Payload.MediaUrl; var faxPageCount = response.Data.Payload.PageCount;
Newtonsoft.Json 反序列化代码示例
var response = JsonConvert.DeserializeObject<TelnyxWebhookResponse>(jsonStr); var faxMediaUrl = response.Data.Payload.MediaUrl;
注意事项
- 若后续需要处理Telnyx其他事件类型的payload,可定义不同的Payload子类结合多态处理,无需重复定义外层结构
- ID、手机号等字符串类型字段不要定义为数值类型,避免溢出或格式丢失
occurred_at为ISO8601格式时间,两类JSON库都支持自动转为DateTime类型
内容的提问来源于stack exchange,提问作者Greybeard
相关产品推荐
相关产品推荐

