using System.Collections.Generic;
public static void Main()
List<OutgoingPaymentApprovalDetails> inputs = new List<OutgoingPaymentApprovalDetails>()
new OutgoingPaymentApprovalDetails() { OriginatorId = 1, Name = "Name1", DocumentId = "DocumentId1", Amount = 1.0, DebitAccountNo = "DebitAccountNo1", CreditAccountNo = "CreditAccountNo1"},
new OutgoingPaymentApprovalDetails() { OriginatorId = 1, Name = "Name1", DocumentId = "DocumentId1", Amount = 2.0, DebitAccountNo = "DebitAccountNo2", CreditAccountNo = "CreditAccountNo2"},
new OutgoingPaymentApprovalDetails() { OriginatorId = 1, Name = "Name1", DocumentId = "DocumentId2", Amount = 3.0, DebitAccountNo = "DebitAccountNo3", CreditAccountNo = "CreditAccountNo3"},
new OutgoingPaymentApprovalDetails() { OriginatorId = 1, Name = "Name1", DocumentId = "DocumentId2", Amount = 4.0, DebitAccountNo = "DebitAccountNo4", CreditAccountNo = "CreditAccountNo4"},
new OutgoingPaymentApprovalDetails() { OriginatorId = 2, Name = "Name2", DocumentId = "DocumentId3", Amount = 5.0, DebitAccountNo = "DebitAccountNo5", CreditAccountNo = "CreditAccountNo5"},
new OutgoingPaymentApprovalDetails() { OriginatorId = 3, Name = "Name3", DocumentId = "DocumentId4", Amount = 6.0, DebitAccountNo = "DebitAccountNo6", CreditAccountNo = "CreditAccountNo6"},
new OutgoingPaymentApprovalDetails() { OriginatorId = 3, Name = "Name3", DocumentId = "DocumentId5", Amount = 7.0, DebitAccountNo = "DebitAccountNo7", CreditAccountNo = "CreditAccountNo7"},
var originalDetails = inputs.GroupBy(g => g.OriginatorId).Select(g => new OriginatorDetails()
DocumentDetails = g.GroupBy(d => d.DocumentId)
.Select(d => new DocumentDetails()
TransactionDetails = d.Select(t => new TransactionDetails() { DebitAccountNo = t.DebitAccountNo, CreditAccountNo = t.CreditAccountNo, Amount = t.Amount.ToString() }).ToList()
var serializedString = JsonConvert.SerializeObject(originalDetails);
Console.WriteLine(serializedString);
Console.WriteLine("Hello World");
public class OriginatorDetails
public int OriginatorId { get; set; }
public string Name { get; set; }
public List<DocumentDetails> DocumentDetails { get; set; }
public class DocumentDetails
public string DocumentId { get; set; }
public List<TransactionDetails> TransactionDetails { get; set; }
public class TransactionDetails
public string Amount { get; set; }
public string DebitAccountNo { get; set; }
public string CreditAccountNo { get; set; }
public class OutgoingPaymentApprovalDetails
public int OriginatorId { get; set; }
public string Name { get; set; }
public string DocumentId { get; set; }
public string DebtorName { get; set; }
public string Currency { get; set; }
public double Amount { get; set; }
public string Description { get; set; }
public string DebitAccountNo { get; set; }
public string CreditAccountNo { get; set; }