簡體   English   中英

如何從json數組創建List集合?

[英]How do i create a List collection from a json array?

[{prodId:'10',qnty:'12',total:'1200'}, 
{prodId:'11',qnty:'2',total:'10'}, 
{prodId:'4',qnty:'10',total:'50'}]

我有以下課程

public class ListItem{
    public int prodID {get;set;}
    public int qnty {get;set;}
    public decimal total {get;set;}
}

上面的json數組將從ajax調用發送到action方法。 在動作方法中,我需要從json數組構建一個List<ListItem>集合。 我該怎么做呢?

這里的更新是控制器

public class ShoppingCartController : Controller
{

    public JsonResult AddToShoppingCart(string  jsonString)
    {
        int carId = 0;

        string[] str=  jsonString.Split(',');

        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == "cartId")
            {
                string tmp = str[i].Split(':').LastOrDefault();
                carId = int.Parse(tmp);

                if (carId == -1)
                {
                    //create new cart
                }
                else { 

                }
            }
        }
    }

這是ajax:

  $('#addToCartForm #add').on('click', function () {
                   $.ajax({
                        url: 'ShoppingCart/AddToShoppingCart',
                        method: 'post',
                        data: JSON.stringify(item),
                        dataType: 'json',
                        success: function (data) {

                        },
                        error: function (jqXHR, textStatus, errorThrown) {

                        }
                    });
                });

將您的POST方法更改為

public JsonResult AddToShoppingCart(List<ListItem> model)

和腳本

 $('#addToCartForm #add').on('click', function () {
     $.ajax({
         url: '@Url.Action("AddToShoppingCart", "ShoppingCart")', // don't hard code
         method: 'post',
         data: JSON.stringify({ 'model': item }),
         dataType: 'json',
         contentType: 'application/json; charset=utf-8',
         success: function (data) {
         },
         error: function (jqXHR, textStatus, errorThrown) {
         }
     });
});

假設item是您顯示的javascript數組。 DefaultModelBinder將正確綁定集合

您可以將字符串變量反序列化為對象列表

按代碼

var obj = jsonString.Deserialize<List<ListItem>>();

public static T Deserialize<T>(this string json)
        {
            T returnValue;
            using (var memoryStream = new MemoryStream())
            {
                var settings = new DataContractJsonSerializerSettings
                {
                    DateTimeFormat = new System.Runtime.Serialization.DateTimeFormat("yyyy-MM-dd HH:mm:ssZ") 

                };
                byte[] jsonBytes = Encoding.UTF8.GetBytes(json);
                memoryStream.Write(jsonBytes, 0, jsonBytes.Length);
                memoryStream.Seek(0, SeekOrigin.Begin);
                using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(memoryStream, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null))
                {
                    var serializer = new DataContractJsonSerializer(typeof(T),settings);
                    returnValue = (T)serializer.ReadObject(jsonReader);
                }
            }
            return returnValue;
        }

將JSON反序列化為C#動態對象?

當json結構與C#類結構相同時,可以使用JArray類的ToObject方法。 像這樣:

List<ListItem> result = JArray.ToObject<List<ListItem>>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM