![](/img/trans.png)
[英]Using LINQ how do I create a List of one particular field of an entity from a collection entities
[英]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#類結構相同時,可以使用JArray類的ToObject方法。 像這樣:
List<ListItem> result = JArray.ToObject<List<ListItem>>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.