如何用C#编写WhatsApp Cloud API的POST请求(嵌套对象问题)
解决WhatsApp Cloud API POST请求的C#编写问题
问题原因
你遇到的"Parameter should be a JSON object"错误,核心是**text字段在API要求中是嵌套JSON对象**,但你当前的代码把它定义成了string类型,序列化后会变成字符串值而非对象结构,不符合API的参数格式要求。
正确的类结构定义
需要为嵌套的text对象单独创建一个类,再在主请求类中引用它:
using System; namespace WhatsAppCloudApiDemo { // 对应text嵌套对象的类 public class TextContent { public bool preview_url { get; set; } public string body { get; set; } } // 主请求类 public class WhatsAppMessageRequest { public string messaging_product { get; set; } public string recipient_type { get; set; } public string to { get; set; } public string type { get; set; } public TextContent text { get; set; } } }
修正后的请求代码
实例化对象时,要为text属性赋值为TextContent的实例,而不是直接传字符串:
// 实例化请求对象 var messageRequest = new WhatsAppMessageRequest() { messaging_product = "whatsapp", recipient_type = "individual", to = number, // 你的目标手机号 type = "text", text = new TextContent() { preview_url = false, body = message // 你的消息内容 } }; // 序列化为JSON var requestJson = JsonConvert.SerializeObject(messageRequest); Console.WriteLine(requestJson); // 构造请求内容并发送 var payLoad = new StringContent(requestJson, Encoding.UTF8, "application/json"); // 建议用异步await替代.Result,避免阻塞线程 var response = await client.PostAsync(endpoint, payLoad); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result);
验证序列化结果
修正后的代码序列化后会生成符合API要求的JSON结构,和官方示例一致:
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "PHONE_NUMBER", "type": "text", "text": { "preview_url": false, "body": "MESSAGE_CONTENT" } }
额外提示
- 确保使用的
JsonConvert来自Newtonsoft.Json包(如果是.NET Core/.NET 5+,也可以用System.Text.Json,只需调整序列化代码) - 发送请求时尽量使用
await异步调用,避免使用.Result导致的线程阻塞问题
内容的提问来源于stack exchange,提问作者Shantanu Asthana
相关产品推荐
相关产品推荐

