如何在下面的 C# 中的 JSON 場景中檢索屬于名為 [items] 的物件的所有 [names]?
我正在使用購物車 api,并希望在客戶進入感謝頁面后向客戶展示所有列出的屬于訂單一部分的商品。我在 api 中查看的父物件稱為items,它具有子物件資料,例如每個專案的價格、每個專案的名稱和每個專案的產品影像等......
在我的控制器中,當我只需要檢索簡單資訊(例如訂單只有 1 個 invoiceNumber、1 個付款方式、1 個運輸方式、1 個促銷代碼等)時,我在下面執行此操作。下面的代碼可以正常作業并讓我以那么簡單的方式獲取資料下面的場景。
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
var obj = JObject.Parse(result);
//Order Info
string invoiceNumber = (string)obj["invoiceNumber"];
string email = (string)obj["email"];
string paymentMethod = (string)obj["paymentMethod"];
string shippingMethod = (string)obj["shippingMethod"];
//Discount info
string amountSaved = (string)obj["discounts"][0]["amountSaved"];
string promoCode = (string)obj["discounts"][0]["code"];
但是現在我需要利用一個名為 [items] 的物件(訂單中商品的資料),該物件將根據作為客戶訂單一部分的單個商品的數量而具有許多商品名稱。這是我嘗試過的,但后來意識到它只會根據我在括號內使用的數字回傳一條記錄。
string items = (string)obj["items"][0]["name"]; //This returned the product at index 0
string items = (string)obj["items"][1]["name"]; //This returned the product at index 1
string items = (string)obj["items"][2]["name"]; //This returned the product at index 2
如何撰寫語法以便我可以獲取當前駐留在專案物件中的所有名稱物件,例如?我知道它與反序列化物件和串列有關,但我不知道語法和如何處理。
關于如何完成這項作業的任何建議?
uj5u.com熱心網友回復:
最簡單的方法
List<string> names = obj["items"].Select(x => (string) x["name"] ).ToList();
測驗
Console.WriteLine( string.Join(",",names)); // prod1,prod2
更復雜的方法是創建 ac# 類并反序列化資料。但在這種情況下,您將能夠使用 Linq 進行查詢和搜索
List<Item> items = obj["items"].Select(x => x.ToObject<Item>()).ToList()
public class Item
{
public string name { get; set; }
public double price { get; set; }
public int quantity { get; set; }
}
結果(json格式)
[
{
"name": "prod1",
"price": 12.99,
"quantity": 4
},
{
"name": "prod2",
"price": 17.65,
"quantity": 1
}
]
uj5u.com熱心網友回復:
您可以使用 Newtonsoft json 包將物件轉換為 JSON 陣列。請參考以下鏈接
http://www.newtonsoft.com/json/help/html/SerializingJSON.htm
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425449.html
標籤:C# 数组 json asp.net-mvc 反序列化
