Messagebird NuGet包3.2.0:C#中Recipients对象返回结构异常
问题分析与解决办法
可能的原因
- SDK模型序列化缺陷:3.2.0版本的Messagebird C# SDK中,
Recipients类的属性可能缺少正确的序列化特性(比如JsonPropertyName),导致API返回的totalCount、items等字段无法被反序列化到对象中,仅msisdns字段因配置正确被解析。 - SDK内部响应处理简化:该版本SDK可能在封装响应时做了简化,刻意只提取了
msisdns列表,丢弃了其他结构信息,和官方API的完整返回结构脱节。 - API版本不匹配:虽然你用Postman调用的是相同API,但SDK可能默认调用了旧版本的API端点,旧版本返回结构不含
totalCount、items等字段(此可能性较低,但可排查)。
解决办法
手动解析原始响应
绕过SDK的封装对象,直接获取API的原始JSON响应,自己反序列化成完整结构。示例代码:using MessageBird; using System.Net.Http; using System.Text.Json; var apiKey = "你的API密钥"; var client = new MessageBirdClient(apiKey); var message = new Message("发件人", "短信内容", new List<string> { "目标号码" }); // 获取原始HTTP响应 var httpResponse = client.ExecuteRequest(HttpMethod.Post, "/messages", message); var rawJson = await httpResponse.Content.ReadAsStringAsync(); // 定义匹配API返回的完整模型类 public class FullRecipients { [JsonPropertyName("totalCount")] public int TotalCount { get; set; } [JsonPropertyName("sentCount")] public int SentCount { get; set; } [JsonPropertyName("deliveredCount")] public int DeliveredCount { get; set; } [JsonPropertyName("failedCount")] public int FailedCount { get; set; } [JsonPropertyName("items")] public List<RecipientItem> Items { get; set; } [JsonPropertyName("msisdns")] public List<string> Msisdns { get; set; } } public class RecipientItem { [JsonPropertyName("msisdn")] public string Msisdn { get; set; } [JsonPropertyName("status")] public string Status { get; set; } [JsonPropertyName("createdDatetime")] public DateTime CreatedDatetime { get; set; } [JsonPropertyName("updatedDatetime")] public DateTime UpdatedDatetime { get; set; } } // 反序列化获取完整数据 var fullRecipients = JsonSerializer.Deserialize<FullRecipients>(rawJson);更换SDK版本
尝试升级到最新版的Messagebird NuGet包,或者降级到3.2.0之前的稳定版本(比如3.1.0),新版本大概率修复了序列化或响应处理的bug,能正确映射完整的recipients结构。检查SDK的API版本配置
查看SDK是否支持指定API版本的参数,确保和你Postman调用的API版本一致。比如部分SDK允许通过MessageBirdClient的构造参数或属性设置ApiVersion为v1(如果Postman用的是v1版本)。修复SDK模型类(本地修改)
如果你能获取SDK的源代码,检查Recipients类的属性是否和API返回的字段名匹配。比如如果API返回的是totalCount,但SDK类里的属性是TotalCount且未加JsonPropertyName("totalCount")特性,手动添加该特性后重新编译引用,即可解决反序列化问题。
内容的提问来源于stack exchange,提问作者Harsh t
相关产品推荐
相关产品推荐

