Как я могу сериализовать DataTable, который содержит список телефонных номеров, BodyOverride и ChannelType, в эту структуру? Окончательный JSON должен выглядеть как в примере ниже. Я вижу несколько сообщений, в которых предлагается использовать словарь, но я не уверен, что смогу этого добиться.
{
"Addresses": {
"+1713XXXXXXX": {
"BodyOverride": "sent",
"ChannelType": "SMS"
},
"+1832XXXXXXX": {
"BodyOverride": "this is a text from PINPOINT",
"ChannelType": "SMS"
}
}
}
Словарь будет работать. См. Как я могу разобрать строку JSON, которая вызовет недопустимые идентификаторы C#?, Создайте строго типизированный объект C# из объекта json с идентификатором в качестве имени, Десериализовать вложенный JSON в объекты C#, Десериализация JSON .NET в сложный тип с ключом / именем объекта или т. д.





Попробуйте использовать такую структуру классов:
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, используя приличную библиотеку сериализации, такую как Json.Net:
string json = JsonConvert.SerializeObject(payload, Formatting.Indented);
Рабочий пример: https://dotnetfiddle.net/b7Ckzs
Важная заметка: в приведенном выше решении предполагается, что номера телефонов в столбце Address будут различаться во всех строках в DataTable. Если их нет, то это решение не будет работать, потому что ключи словаря должны быть уникальными. В этом случае вам нужно будет разбить данные на несколько пакетов или найти другое решение для работы с дубликатами.
Большое спасибо, Брайан. Это очень полезно. Я никогда раньше не использую словарь, поэтому мне сложно понять, как его загрузить
что не так со словарем?