【问题标题】:Serialize Json Array with Asp.net MVC使用 Asp.net MVC 序列化 Json 数组
【发布时间】:2020-08-09 06:49:56
【问题描述】:

有人可以帮帮我吗?

如何将“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 as 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)

【问题讨论】:

  • Edit-Paste Special-Paste JSON as classes Visual Studio 中的菜单项以获得正确的类模型。 GetNetPagShippings 应该返回一个数组,而不是单个项目

标签: c# arrays json asp.net-mvc jsonserializer


【解决方案1】:

您应该像数组一样初始化 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; }
}

【讨论】:

    【解决方案2】:

    您可以使用数组初始值设定项语法。简单的例子是 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);
    

    【讨论】:

      【解决方案3】:

      您的 GetNetRoot 外部类需要将“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; }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多