[英]Deserialise JSON and access content using Linq to JSon
我將以下JSON存儲在要解析的cookie中:
{"package":[{"id":"5054","nodeId":"3286"},{"id":"8888","nodeId":"7777"}], "hotel":[{"id":"3421","nodeId":"1234"},{"id":"8748","nodeId":"2435"}], "activity":[{"id":"5054","nodeId":"3286"},{"id":"8888","nodeId":"7777"},{"id":"2131","nodeId":"2342"}]}
我從關於這個問題的公認答案中了解到, 使用Newtonsoft將JSON反序列化為.NET對象(或者可能是LINQ為JSON?) ,您可以使用以下代碼訪問JSON表示法中的單個對象:
JToken token = JObject.Parse(stringFullOfJson);
int page = (int)token.SelectToken("page");
int totalPages = (int)token.SelectToken("total_pages");
因此,我將其調整為以下代碼:
HttpCookie cookie = Request.Cookies.Get("wishlist");
string JSONstring = string.Empty;
string nodeId = string.Empty;
if (cookie != null)
{
JSONstring = cookie.Value;
JToken token = JObject.Parse(JSONstring);
}
現在,我僅想舉例說明package數組,並遍歷此數組中的每個項目,並以以下格式輸出id:
5054,8888
從示例代碼中,我想出了以下方法,但是我不確定我是否朝着正確的方向前進。
JObject obj = JObject.Parse(JSONstring);
JArray packages = (JArray)obj["package"];
指定數組之一的最佳方法是什么? hotel,package,遍歷其內容並輸出找到的每個id節點? nodeId始終為數字,但id可以為字符串或整數,因此這又增加了一層復雜性。
任何幫助將不勝感激,如果這是一個愚蠢或簡單的問題,我深表歉意,但是我已經開始使用.Net和OO,所以某些概念仍然有些模糊。
這是我的操作方法,我將創建反序列化JSON所需的類:
public class JSONCookie
{
public Package[] package { get; set; }
public Hotel[] hotel { get; set; }
public Activity[] activity { get; set; }
}
public class Package
{
public string id { get; set; }
public string nodeId { get; set; }
}
public class Hotel
{
public string id { get; set; }
public string nodeId { get; set; }
}
public class Activity
{
public string id { get; set; }
public string nodeId { get; set; }
}
現在,我將創建一個實際上進行反序列化的方法:
public JSONCookie GetJSONCookieResponse()
{
try
{
// Add your own code that gets the Response Here.
// string response = "{"package":[{"id":"5054","nodeId":"3286"},{"id":"8888","nodeId":"7777"}], "hotel":[{"id":"3421","nodeId":"1234"},{"id":"8748","nodeId":"2435"}], "activity":[{"id":"5054","nodeId":"3286"},{"id":"8888","nodeId":"7777"},{"id":"2131","nodeId":"2342"}]}";
//return new JsonSerializer().Deserialize<JSONCookie>(new JsonTextReader(new StringReader(response)));
}
catch
{
return null;
}
}
然后從返回的JSONCookie對象中使用LINQ選擇所需的對象,如下所示:
x.package.Select(p=>p.id);
經過大量的Google搜尋,這是我想到的最簡單的解決方案:
HttpCookie cookie = Request.Cookies.Get("wishlist");
string JSONstring = string.Empty;
string nodeId = string.Empty;
string test = string.Empty;
if (cookie != null)
{
JSONstring = cookie.Value;
JObject obj = JObject.Parse(JSONstring);
JArray packages = (JArray)obj["package"];
foreach (var item in packages.Children()){
var properties = item.Children<JProperty>();
var idElement = properties.FirstOrDefault(x => x.Name == "id");
var myElementValue = idElement.Value;
test = test + myElementValue + ",";
}
}
這將以CSV格式(帶有結尾的)輸出packages數組中的所有id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.