Сериализация JSON с числами в качестве имен свойств - PullRequest
0 голосов
/ 13 ноября 2018

Как я могу сериализовать DataTable, который содержит список телефонных номеров BodyOverride и ChannelType для этой структуры?Окончательный вариант JSON должен выглядеть следующим образом.Я вижу некоторые посты, которые предлагают использовать словарь, но не уверен, что смогу этого достичь.

{
  "Addresses": {
    "+1713XXXXXXX": {
      "BodyOverride": "sent",
      "ChannelType": "SMS"
    },
    "+1832XXXXXXX": {
      "BodyOverride": "this is a text from PINPOINT",
      "ChannelType": "SMS"
    }
  }
}

1 Ответ

0 голосов
/ 13 ноября 2018

Попробуйте использовать следующую структуру классов:

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);

Fiddle: https://dotnetfiddle.net/b7Ckzs

Важное примечание : в приведенном выше решении предполагается, что номера телефонов в столбце Address будут различаться во всех строках DataTable.Если это не так, то это решение не будет работать , поскольку ключи словаря должны быть уникальными.В этом случае вам нужно будет разбить данные на несколько пакетов или найти другое решение для устранения дубликатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...