尝试查找对象是否为空的复杂嵌套数组 c# asp.net
Complex nested Array trying to find if an object is null c# asp.net
我正在为购物车使用 api,该购物车具有一些复杂的 json(对我来说非常复杂)数据结构如下面的屏幕截图所示。在我的代码中的这种情况下,我试图修复一个错误,我将通过说明数据及其结构来解释这个错误,因为我对 JSON 和数组很陌生。
这是来自属于客户所下订单的数据的Visual Studio json reader。 [0] 索引处的此项有一个 customFields,它有一个 value.
当客户完成购买时,他们购买的某些商品可以有自定义字段,例如衬衫的尺寸(大)或(中)或(小)等...在 JSON 这些customFields 有一个 value,在这种情况下,它是我在感谢页面上显示的衬衫尺寸,以便客户知道他购买的尺寸。本质上,我正在尝试将数据准备好传递给感谢页面视图。
当我在控制器中调用这些 items 时,代码仅在 ALL 购买的商品具有 自定义字段。如果客户购买了带有 NO 自定义字段的咖啡杯之类的东西,那么应用程序就会中断,因为我猜我的代码只考虑了实际具有 customFields[= 的项目43=].
这是我目前拥有的代码,仅当购买的所有商品都有自定义字段时才有效。这是在我的控制器里面。
public ActionResult Thankyou(string token)
{
int itemsCountAddedToCart = (int)obj["items"].Count();
var items = obj["items"].Select(o =>
new Item
{
name = o["name"].ToString(),
quantity = int.Parse(o["quantity"].ToString()),
price = double.Parse(o["price"].ToString()),
image = o["image"].ToString(),
url = o["url"].ToString(),
//This customFields is what works, but only if all items had custom fields.
customFields = o["customFields"][0]["value"].ToString(),
});
thankYouViewModel.OrderItems = items;
}
//ThankYou View Model that loads hold the data to be able to show in the view.
public class ThankYouViewModel
{
public IEnumerable<Item> OrderItems { get; set; }
}
public class Item
{
public string name { get; set; }
public double price { get; set; }
public int quantity { get; set; }
public string image { get; set; }
public string url { get; set; }
//customFields
public string customFields { get; set; }
}
所以上面的代码可以工作,但是当我有 没有 的项目时会中断 customFields。这是我得到的错误:
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'
那么我的代码应该如何查看它当前的中断位置,以便它可以解决 JSON 中的 项目 之一没有 customFields 属性的情况?我很困惑,并尝试添加一些条件语句,但没有成功,因为我正在处理一些复杂的问题 json 我还不太了解。
使用 customFields = o["customFields"][0]["value"].ToString(),
您可以直接从 customFields 数组接收值。如果你的情况下没有数组,那么就没有什么可得到的。
我建议您检查您的自定义字段是否存在:
var item = new Item ();
item.name = o["name"].ToString();
item.quantity = int.Parse(o["quantity"].ToString());
item.price = double.Parse(o["price"].ToString());
item.image = o["image"].ToString();
item.url = o["image"].ToString();
if(o["customFields"] != null)
{
item.customFields = o["customFields"][0]["value"].ToString();
}
如果您想忘记 customFields 数组中存在多个元素的可能性,而只将第一个元素值转换为字符串,则使用此方法:
customFields = (o["customFields"] == null || o["customFields"].Count() == 0)?null:o["customFields"][0]["value"].ToString(),
我正在为购物车使用 api,该购物车具有一些复杂的 json(对我来说非常复杂)数据结构如下面的屏幕截图所示。在我的代码中的这种情况下,我试图修复一个错误,我将通过说明数据及其结构来解释这个错误,因为我对 JSON 和数组很陌生。
这是来自属于客户所下订单的数据的Visual Studio json reader。 [0] 索引处的此项有一个 customFields,它有一个 value.
当客户完成购买时,他们购买的某些商品可以有自定义字段,例如衬衫的尺寸(大)或(中)或(小)等...在 JSON 这些customFields 有一个 value,在这种情况下,它是我在感谢页面上显示的衬衫尺寸,以便客户知道他购买的尺寸。本质上,我正在尝试将数据准备好传递给感谢页面视图。
当我在控制器中调用这些 items 时,代码仅在 ALL 购买的商品具有 自定义字段。如果客户购买了带有 NO 自定义字段的咖啡杯之类的东西,那么应用程序就会中断,因为我猜我的代码只考虑了实际具有 customFields[= 的项目43=].
这是我目前拥有的代码,仅当购买的所有商品都有自定义字段时才有效。这是在我的控制器里面。
public ActionResult Thankyou(string token)
{
int itemsCountAddedToCart = (int)obj["items"].Count();
var items = obj["items"].Select(o =>
new Item
{
name = o["name"].ToString(),
quantity = int.Parse(o["quantity"].ToString()),
price = double.Parse(o["price"].ToString()),
image = o["image"].ToString(),
url = o["url"].ToString(),
//This customFields is what works, but only if all items had custom fields.
customFields = o["customFields"][0]["value"].ToString(),
});
thankYouViewModel.OrderItems = items;
}
//ThankYou View Model that loads hold the data to be able to show in the view.
public class ThankYouViewModel
{
public IEnumerable<Item> OrderItems { get; set; }
}
public class Item
{
public string name { get; set; }
public double price { get; set; }
public int quantity { get; set; }
public string image { get; set; }
public string url { get; set; }
//customFields
public string customFields { get; set; }
}
所以上面的代码可以工作,但是当我有 没有 的项目时会中断 customFields。这是我得到的错误:
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index'
那么我的代码应该如何查看它当前的中断位置,以便它可以解决 JSON 中的 项目 之一没有 customFields 属性的情况?我很困惑,并尝试添加一些条件语句,但没有成功,因为我正在处理一些复杂的问题 json 我还不太了解。
使用 customFields = o["customFields"][0]["value"].ToString(),
您可以直接从 customFields 数组接收值。如果你的情况下没有数组,那么就没有什么可得到的。
我建议您检查您的自定义字段是否存在:
var item = new Item ();
item.name = o["name"].ToString();
item.quantity = int.Parse(o["quantity"].ToString());
item.price = double.Parse(o["price"].ToString());
item.image = o["image"].ToString();
item.url = o["image"].ToString();
if(o["customFields"] != null)
{
item.customFields = o["customFields"][0]["value"].ToString();
}
如果您想忘记 customFields 数组中存在多个元素的可能性,而只将第一个元素值转换为字符串,则使用此方法:
customFields = (o["customFields"] == null || o["customFields"].Count() == 0)?null:o["customFields"][0]["value"].ToString(),