Сериализация Json массива с Asp. net MVC - PullRequest
0 голосов
/ 25 апреля 2020

Может ли кто-нибудь мне помочь?

Как я могу кодировать класс 'Shippings' как массив, чтобы получить пример json ниже?

{
      "seller_id": "123",
      "amount": 100,
      "order": {
          "order_id": "1111",
          "sales_tax": 0,
          "product_type": "service"
   },
   "shippings": 
    [
      {
         "first_name": "John",
         "phone_number": "5551999887766",
         "shipping_amount": 3000,
         "address": {
            "street": "Street 35 Conts",
            "number": "1000",
            "complement": "ap1", 
            "postal_code": "90230060"
         }
      }
    ],
   "credit": {
      "delayed": false,
      "authenticated": false
   }
}

Я делаю это ниже, используя asp. net mvc, но не знаю, как получить Shippings как Array [].

Может кто-нибудь дать мне пример или еще что-нибудь ... Я буду признателен.

        var request = new GetNetRoot()
        {
            SellerId = seller_id,
            Amount = orderItens.Amount
            Order = new GetNetPagOrder()
            {
                OrderId = order.id.ToString(),
                SalesTax =  orderItens.Tax,
                ProductType =  orderItens.ProdType
            },
            Shippings = new GetNetPagShippings()
            {
                FirstName = "",                              
                PhoneNumber = usr.PhoneNumber,
                ShippingAmount = orderItens.AmountShip,
                Address = new GetNetPagAddress()
                {
                    Street = catEnd.IdEnderecoLogradouroNavigation.IdRuaNavigation.Nome,       
                    Number = catEnd.NumEndereco,                                                
                    Complement = catEnd.Complemento,                                           
                    PostalCode = catEnd.IdEnderecoLogradouroNavigation.Cep                      
                }
            },
            Credit = new GetNetPagCredit()
            {
                Delayed = false,
                Authenticated = false
            }
        };

        var requestBody = JsonConvert.SerializeObject(request)

Ответы [ 3 ]

1 голос
/ 25 апреля 2020

Вы должны инициализировать Shippings как массив:

Shippings = new[] {
    new GetNetPagShippings()
    {
        FirstName = "",                              
        PhoneNumber = usr.PhoneNumber,
        ShippingAmount = orderItens.AmountShip,
        Address = new GetNetPagAddress()
        {
            Street = catEnd.IdEnderecoLogradouroNavigation.IdRuaNavigation.Nome,       
            Number = catEnd.NumEndereco,                                                
            Complement = catEnd.Complemento,                                           
            PostalCode = catEnd.IdEnderecoLogradouroNavigation.Cep                      
        }
    }



public class GetNetPagamentoRoot
{
    ...

    public GetNetPagShippings[] Shippings { get; set; }
}
1 голос
/ 25 апреля 2020

Вы можете использовать синтаксис инициализатора массива. Simplisti c пример будет массивом int:

int[] myArray = new [] { 1, 2, 3 }

В вашем коде Shippings должен быть инициализирован как массив.

var request = new GetNetRoot()
{
    SellerId = seller_id,
    Amount = orderItens.Amount
    Order = new GetNetPagOrder()
    {
        OrderId = order.id.ToString(),
        SalesTax =  orderItens.Tax,
        ProductType =  orderItens.ProdType
    },
    // Array initializer with 2 elements.
    Shippings = new[] {
        new GetNetPagShippings()
        {
            FirstName = "",                              
            PhoneNumber = usr.PhoneNumber,
            ShippingAmount = orderItens.AmountShip,
            Address = new GetNetPagAddress()
            {
                Street = catEnd.IdEnderecoLogradouroNavigation.IdRuaNavigation.Nome,       
                Number = catEnd.NumEndereco,                                                
                Complement = catEnd.Complemento,                                           
                PostalCode = catEnd.IdEnderecoLogradouroNavigation.Cep                      
            }
        },
        new GetNetPagShippings()
        {
            FirstName = "",                              
            PhoneNumber = usr.PhoneNumber,
            ShippingAmount = orderItens.AmountShip,
            Address = new GetNetPagAddress()
            {
                Street = catEnd.IdEnderecoLogradouroNavigation.IdRuaNavigation.Nome,       
                Number = catEnd.NumEndereco,                                                
                Complement = catEnd.Complemento,                                           
                PostalCode = catEnd.IdEnderecoLogradouroNavigation.Cep                      
            }
        }
    },
    Credit = new GetNetPagCredit()
    {
        Delayed = false,
        Authenticated = false
    }
};

var requestBody = JsonConvert.SerializeObject(request);
0 голосов
/ 25 апреля 2020

Ваш внешний класс Ge tNetRoot должен определить свойство "Shippings" в виде списка или массива класса GetNetPagShippings, а не одного экземпляра. Когда вы сериализуете его в JSON, он будет представлен как JSON массив объекта.

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var myClassInstance = new MyOuterClass()
            {
                OuterProperty = "Outer Property",
                MyInnerClassList = new List<MyInnerClass>()
                {
                    new MyInnerClass()
                    {
                        InnerProperty = "Inner Property Item 1"
                    },
                    new MyInnerClass()
                    {
                        InnerProperty = "Inner Property Item 2"
                    }
                }
            };

            string json = JsonConvert.SerializeObject(myClassInstance);
            Console.WriteLine(json);
        }
    }

    public class MyOuterClass
    {
        public string OuterProperty { get; set; }
        public List<MyInnerClass> MyInnerClassList { get; set; }
    }

    public class MyInnerClass
    {
        public string InnerProperty { get; set; }
    }
}
...