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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:04