Как объединить элементы в один из нескольких списков - PullRequest
0 голосов
/ 29 января 2020

Мне нужно объединить объекты из всех элементов списка, один к одному, и получить json строки, подобные этой:

[{"Title":"All", "Sum":2487443987.0,"Quantity":9247081,"Sessions":162973},{"Title":"Region", "Sum":38523698.0,"Quantity":172381,"Sessions":2445},{"Title":"City", "Sum":27080022.0,"Quantity":120689,"Sessions":1600}]

[{"Title":"All", "Sum":371348351.0,"Quantity":1306966,"Sessions":26574},{"Title":"Region", "Sum":5496337.0,"Quantity":23843,"Sessions":396},{"Title":"City", "Sum":4123251.0,"Quantity":17871,"Sessions":278}]

и т. Д. c

Json :

[{
    "Title": "All",
    "TicketSales": [{
        "Sum": 0.0,
        "Quantity": 0,
        "Sessions": 0
    }, {
        "Sum": 2487443987.0,
        "Quantity": 9247081,
        "Sessions": 162973
    }, {
        "Sum": 371348351.0,
        "Quantity": 1306966,
        "Sessions": 26574
    }, {
        "Sum": 587094584.0,
        "Quantity": 2184721,
        "Sessions": 33953
    }, {
        "Sum": 553763164.0,
        "Quantity": 2083403,
        "Sessions": 34237
    }, {
        "Sum": 508663723.0,
        "Quantity": 1910268,
        "Sessions": 34208
    }, {
        "Sum": 466574165.0,
        "Quantity": 1761723,
        "Sessions": 34001
    }]
}, {
    "Title": "Region",
    "TicketSales": [{
        "Sum": 0.0,
        "Quantity": 0,
        "Sessions": 0
    }, {
        "Sum": 38523698.0,
        "Quantity": 172381,
        "Sessions": 2445
    }, {
        "Sum": 5496337.0,
        "Quantity": 23843,
        "Sessions": 396
    }, {
        "Sum": 9252616.0,
        "Quantity": 41257,
        "Sessions": 508
    }, {
        "Sum": 8705679.0,
        "Quantity": 38891,
        "Sessions": 514
    }, {
        "Sum": 7676393.0,
        "Quantity": 34777,
        "Sessions": 510
    }, {
        "Sum": 7392673.0,
        "Quantity": 33613,
        "Sessions": 517
    }]
}, {
    "Title": "City",
    "TicketSales": [{
        "Sum": 0.0,
        "Quantity": 0,
        "Sessions": 0
    }, {
        "Sum": 27080022.0,
        "Quantity": 120689,
        "Sessions": 1600
    }, {
        "Sum": 4123251.0,
        "Quantity": 17871,
        "Sessions": 278
    }, {
        "Sum": 6378203.0,
        "Quantity": 28442,
        "Sessions": 329
    }, {
        "Sum": 5920905.0,
        "Quantity": 26271,
        "Sessions": 330
    }, {
        "Sum": 5409078.0,
        "Quantity": 24291,
        "Sessions": 328
    }, {
        "Sum": 5248585.0,
        "Quantity": 23814,
        "Sessions": 335
    }]
}]

JSON классы:

public class RootObject
{
    public string Title { get; set; }
    public List<TicketSale> TicketSales { get; set; }
}

public class TicketSale
{
    public double Sum { get; set; }
    public int Quantity { get; set; }
    public int Sessions { get; set; }
}

public class Report
{
    public string Title { get; set; }
    public double Sum { get; set; }
    public int Quantity { get; set; }
    public int Sessions { get; set; }
}

Часть моего кода:

var finallReport = "";
var rootList = JsonConvert.DeserializeObject<List<RootObject>>(json);
var ticketSalesList = new List<TicketSale>();
var listOfReportList = new List<List<Report>>();


foreach (var r in rootList)
{
    var reports = new List<Report>();
    r.Title.Remove(1);
    r.TicketSales.RemoveAt(0);
    ticketSalesList = r.TicketSales;

    foreach (var t in ticketSalesList)
    {
        reports.Add(new Report
        {
            Title = r.Title,
            Sum = t.Sum,
            Quantity = t.Quantity,
            Sessions = t.Sessions
            });
        }
    listOfReportList.Add(reports);
}

foreach (var element in listOfReportList)
{
    finallReport = JsonConvert.SerializeObject(element).ToString();
    Console.WriteLine(finallReport);
}

Я могу вывести каждый из них, но не могу объединить их! Или можно использовать другой метод, десериализовать json, используя другой метод, так чтобы нужные объекты были немедленно расположены вместе.

1 Ответ

0 голосов
/ 29 января 2020

Это один из способов сделать это:

var rootList = JsonConvert.DeserializeObject<List<RootObject>>(json);
var result = new List<List<Report>>();

foreach (var rootObj in rootList)
{
    for (int i = 0; i < rootObj.TicketSales.Count; i++)
    {
        if (i >= result.Count)
        {
            result.Add(new List<Report>());
        }

        result[i].Add(new Report
        {
            Title = rootObj.Title,
            Sum = rootObj.TicketSales[i].Sum,
            Quantity = rootObj.TicketSales[i].Quantity,
            Sessions = rootObj.TicketSales[i].Sessions
        });
    }
}

foreach (var element in result.Skip(1)) //skip the first one with '0' values
{
    Console.WriteLine(JsonConvert.SerializeObject(element));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...