尝试使用这样的类结构:
public class Payload
{
public Dictionary<string, Item> Addresses { get; set; }
}
public class Item
{
public string BodyOverride { get; set; }
public string ChannelType { get; set; }
}
假设您从一个看起来像这样的DataTable 开始:
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Address");
dataTable.Columns.Add("BodyOverride");
dataTable.Columns.Add("ChannelType");
dataTable.Rows.Add("+1713XXXXXXX", "sent", "SMS");
dataTable.Rows.Add("+1832XXXXXXX", "this is a text from PINPOINT", "SMS");
...您可以像这样轻松地将其转换为所需的类结构:
var payload = new Payload
{
Addresses = dataTable.Rows
.Cast<DataRow>()
.ToDictionary(row => (string)row["Address"],
row => new Item
{
BodyOverride = (string)row["BodyOverride"],
ChannelType = (string)row["ChannelType"]
})
};
...最后使用像 Json.Net 这样的序列化库将其序列化为 JSON:
string json = JsonConvert.SerializeObject(payload, Formatting.Indented);
小提琴:https://dotnetfiddle.net/b7Ckzs
重要提示:上述解决方案假定Address 列中的电话号码在DataTable 的所有行中都是不同的。如果不是,则此解决方案将不起作用,因为字典键必须是唯一的。在这种情况下,您需要将数据拆分为多个批次,或者寻找其他解决方案来处理重复数据。