Как установить массив объекта внутри свойства класса - PullRequest
1 голос
/ 31 октября 2019

Мне нужно создать объект для возврата json, как это:

{
        "Name": "John",
        "Age": 25,
        "Products": [
            {
                "Code": "1",
                "Price": 400.00
            },
            {
                "Code": "2",
                "Price": 100.00
            },
            {
                "Code": "32",
                "Price": 250.00
            },
        ],
}

Как я могу это сделать? : / Мне просто нужно создать объект и преобразовать в json ... Я знаю, как преобразовать, но не знаю, как заполнить модель Products "массивом объектов"

Мой класс модели:

public class Customer
{
    public string Name { get; set; }
    public string Age { get; set; }
    public Products[] Products { get; set; }
}

public class Products
{
    public string Code { get; set; }
    public string Price { get; set; }
}

Моя программа для заполнения данных: (Здесь вы можете увидеть один пример, заполняющий модель Customer 10 раз и модель Product 3 раза)

            List<Object> customerList = new List<Object>();
            List<Object> productList = new List<Object>();

            for (int i = 0; i < 10; i++)
            {
                Customer customer = new Customer();

                customer.Name = "Pedro";
                customer.Age = "20";

                for (int ii = 0; ii < 3; ii++)
                {
                    Product product = new Product();

                    product.Code = "1";
                    product.Price = "400.00";

                    productList.Add(product);
                }

                customer.Product = // Why I need to do here?

                customerList.Add(customer);
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Краткий ответ на этот вопрос:

customer.Product = // Why I need to do here?

Просто вам нужно добавить свои продукты в виде Product[] (потому что так оно определено)в классе Customer), что мы можем сделать, приведя элементы из списка к Product (таким образом, мы получаем строго типизированные объекты вместо просто Object объектов) и используем метод расширения System.Linq, ToArray() чтобы создать массив из списка:

customer.Product = productList.Select(p => (Product)p).ToArray();

// Note that we should clear our list for the next iteration
productsList.Clear();

Еще несколько вещей, которые следует учитывать:

  1. Классы не должны именоваться во множественном числе, если они не 'Если у вас есть коллекции, ваш класс Products должен называться Product.

  2. Вы должны избегать использования списков object, если у вас есть строго типизированные классы, поэтому List<Object> customerList должно быть List<Customer> customers.

  3. Вы заполняете списки одних и тех же данных снова и снова. Я предполагаю, что это потому, что это всего лишь пример, но хотел сообщить вам на всякий случай.

Ваш существующий код может быть изменен на что-то вроде:

List<Customer> customers = new List<Customer>();

for (int i = 0; i < 10; i++)
{
    // Create a new customer
    Customer customer = new Customer
    {
        Name = "Pedro",
        Age = "20",
    };

    // Create an array of products since Customer expects this type
    Product[] products = new Product[3];
    for (int j = 0; j < products.Length; j++)
    {
        products[j] = new Product
        {
            Code = "1",
            Price = "400.00"
        };
    }

    // Add the array to our customer
    customer.Products = products;

    // Add our customer to the list
    customers.Add(customer);
}

Или мы могли бы использовать чистый Linq и выбрать наши данные, используя Enumerable.Range в качестве конструкции "loop":

List<Customer> customers = Enumerable.Range(0, 10).Select(c =>
    new Customer
    {
        Name = "Pedro",
        Age = "20",
        Products = Enumerable.Range(0, 3).Select(p => new Product
        {
            Code = "1",
            Price = "400.00"
        }).ToArray()
    }).ToList();
0 голосов
/ 31 октября 2019

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

customer.Products = productList.ToArray();

и, конечно, вы должны изменить объявление на:

List<Product> productList = new List<Product>();

если вы не хотите менять объявление по какой-либо причине ?! Вы можете сделать это как:

customer.Products = productList.Select(x => (Product)x).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...