Вы находитесь на правильном пути. Чтобы получить структуру, которую вы указали в своем вопросе, вам необходимо использовать словарь словарей, представляющих сопоставления номера магазина с количеством в SKU. Класс будет выглядеть следующим образом:
class RootObject
{
[JsonProperty("skus")]
public Dictionary<string, Dictionary<string, int>> Skus { get; set; }
}
Вам потребуется небольшое количество кода, чтобы сгруппировать таблицы данных строк в вложенным словарей, как показано на рисунке ниже. Примечание: этот код предполагает, что каждый номер магазина будет встречаться только один раз за SKU. Если это не так, вам нужно будет соответствующим образом отрегулировать его.
DataTable table = new DataTable();
table.Columns.Add("sku", typeof(int));
table.Columns.Add("store", typeof(int));
table.Columns.Add("qty", typeof(int));
table.Rows.Add(20000, 100, 3);
table.Rows.Add(20000, 132, 1);
table.Rows.Add(20000, 320, 0);
table.Rows.Add(30000, 243, 2);
table.Rows.Add(30000, 210, 1);
table.Rows.Add(10000, 410, 5);
var skus = new Dictionary<string, Dictionary<string, int>>();
foreach (DataRow row in table.Rows)
{
string sku = row["sku"].ToString();
Dictionary<string, int> stores;
if (!skus.TryGetValue(sku, out stores))
{
stores = new Dictionary<string, int>();
skus.Add(sku, stores);
}
stores.Add(row["store"].ToString(), (int)row["qty"]);
}
RootObject root = new RootObject { Skus = skus };
После того, как у вас есть данные, собранные в вашем RootObject, это тривиально сериализовать его JSON с помощью Json.NET:
string json = JsonConvert.SerializeObject(root, Formatting.Indented);
десериализации JSON обратно в RootObject так же просто:
RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
Вот полный туда-обратно демо: https://dotnetfiddle.net/qR3wbE
вы пытались что-нибудь, чтобы получить д ? –