1- Se crea una que contenga todos los parámetros, tipos de datos, listas, etc, de Mercado pago ****************************************************************************************************************** namespace SneakerStoreApp.Model.ShoppingCartModel { public class MPModel { public MPModel() { } public int external_reference { get; set; } public List items { get; set; } public string statement_descriptor { get; set; } public MPModelPayer payer { get; set; } public MPModelUrls back_urls { get; set; } public MPModelAddress address { get; set; } public string date_created { get; set; } public string additional_info { get; set; } public string marketplace { get; set; } } public class MPModelItems { public MPModelItems() { } public int id { get; set; } public string title { get; set; } public int quantity { get; set; } public double unit_price { get; set; } public string currency_id { get; set; } } public class MPModelPayer { public MPModelPayer() { } public string name { get; set; } public string surname { get; set; } public string email { get; set; } } public class MPModelUrls { public MPModelUrls() { } public string success { get; set; } public string failure { get; set; } public string pending { get; set; } } public class MPModelAddress { public MPModelAddress() { } public string zip_code { get; set; } public string street_name { get; set; } public string street_number { get; set; } } } ****************************************************************************************************************** 2- Al momento de pagar, se empiezan a llenar los objetos de esta clase de manera individual 3- Primero creamos una lista de objeto MPModelItems y la llenamos en un foreach con todos los productos que el usuario selecciono public List ItemsMp = new List(); foreach (var items in ProductsFinal) { var precioTotalDelProducto = items.idTipoDescuento == "1" ? items.precioVentaDescuento : items.precioVenta; ItemsMp.Add(new MPModelItems { id = items.idProduct, currency_id = "MXN", quantity = items.cantidad, unit_price = (double)Convert.ToDecimal(precioTotalDelProducto), title = items.descripcion }); } La lista se llena con 1 o N productos 4- Si el costo de envío es diferente de cero, se agrega a la misma lista como un item más if (SendTotal != 0) { ItemsMp.Add(new MPModelItems { id = 99999, currency_id = "MXN", quantity = 1, unit_price = (double)SendTotal, title = "Costo de envío" }); } 5- Si se aplico un código o un cupón, este también se mete en la misma lista como un item más if (CodeCuponId == 0) { } else { var descuentoespecial = Convert.ToDouble(AmmountDiscount.Replace("-$", "")); ItemsMp.Add(new MPModelItems { id = 88888, currency_id = "MXN", quantity = 1, unit_price = -descuentoespecial, title = "Cupón/Código" }); } 6 - Se procede a llenar el objeto principal de tipo MPModel var payload = new MPModel { back_urls = new MPModelUrls { success = "succespaymentmovil", failure = "failpaymentmovil", pending = "pendingpaymentmovil" }, external_reference = (int)Convert.ToInt64(UserId), marketplace = "Sneakerstore Mercado Pago App móvil " + Device.RuntimePlatform + "", statement_descriptor = "Sneakerstore Mercado Pago App móvil " + Device.RuntimePlatform + "", payer = new MPModelPayer { name = Name, surname = "", email = Email }, items = ItemsMp, address = new MPModelAddress { zip_code = SelectAddressDelivery.codigoPostal, street_name = SelectAddressDelivery.calle, street_number = SelectAddressDelivery.numeroExt }, additional_info = "Pago generado desde la app sneakerstore "+Device.RuntimePlatform+" el día "+DateTime.Now.ToString("dd-MM-yyyy")+" a las "+ DateTime.Now.ToString("HH:mm")+"" }; 7- Por último toda la clase se serializa en un JSON y se mete en la llamada var stringPayload = JsonConvert.SerializeObject(payload); var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");