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

C# 如何将字符串列表转换为Object 解决SendGrid API类型错误

错误原因

你的代码存在两个核心问题:

  • 多余的序列化操作:你将已经拼接为键值对格式的flattenList再次传入JsonConvert.SerializeObject,导致整个键值对字符串被转义、外层额外套了一层双引号,原本的多个键值对变成了一个单一字符串值。
  • 最终拼接的JSON格式非法:你直接将序列化后的字符串拼入{},得到的内容不符合JSON对象的键:值结构要求,反序列化后得到的本质是一个字符串类型的值,不是结构化对象,所以SendGrid API识别失败。
修复方案

快速修复(基于你现有逻辑调整)

去掉多余的序列化步骤,直接拼接合法JSON:

// 拼接所有键值对字符串
var flattenList = string.Join(",", jsonVars);
// 直接拼为合法JSON对象结构
var validJson = $"{{{flattenList}}}";
// 反序列化得到结构化对象
var emailData = JsonConvert.DeserializeObject<object>(validJson);

更稳定的规范实现(推荐)

避免手动拼接JSON容易出现的转义、格式错误,先将字符串列表转换为字典再生成对象:

using System.Collections.Generic;
using Newtonsoft.Json.Linq;

// 遍历字符串列表拆分键值存入字典
var dataDict = new Dictionary<string, string>();
foreach (var keyValueStr in jsonVars)
{
    // 按第一个冒号拆分,避免值本身包含冒号导致拆分错误
    var splitParts = keyValueStr.Trim('"').Split(new[] { ':' }, 2);
    var key = splitParts[0].Trim('"');
    var value = splitParts[1].Trim('"');
    dataDict.Add(key, value);
}

// 直接生成JObject对象,完全符合SendGrid API的参数类型要求
var emailData = JObject.FromObject(dataDict);
验证方式

修复后可通过以下代码确认类型是否正确:

// 正常应该输出 Newtonsoft.Json.Linq.JObject,而非System.String
Console.WriteLine(emailData.GetType().FullName);

内容的提问来源于stack exchange,提问作者JianYA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:45:05