Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用数字作为属性名序列化JSON_C#_Json_Serialization - Fatal编程技术网

C# 用数字作为属性名序列化JSON

C# 用数字作为属性名序列化JSON,c#,json,serialization,C#,Json,Serialization,如何将包含电话号码列表、BodyOverride和ChannelType的DataTable序列化到此结构?最终的JSON应该如下面的示例所示。我看到一些帖子建议使用字典,但我不确定我是否能做到这一点 { "Addresses": { "+1713XXXXXXX": { "BodyOverride": "sent", "ChannelType": "SMS" }, "+1832XXXXXXX": { "BodyOverride":

如何将包含电话号码列表、
BodyOverride
ChannelType
DataTable
序列化到此结构?最终的JSON应该如下面的示例所示。我看到一些帖子建议使用字典,但我不确定我是否能做到这一点

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

尝试使用如下类结构:

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 = 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"]
                      })
};
…您可以轻松地将其转换为所需的类结构,如下所示:

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 = 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"]
                      })
};
小提琴:


重要注意事项:上述解决方案假设
地址
列中的电话号码在
数据表
的所有行中都是不同的。如果不是,则此解决方案将不起作用,因为字典键必须是唯一的。在这种情况下,您需要将数据拆分为多个批次,或者找到其他解决方案来处理重复数据。

字典有什么问题?字典可以工作。再见等等。非常感谢你,布莱恩。这是非常有帮助的。我以前从未使用过字典,所以我很难弄清楚如何加载它