使用asp.net库反序列化json

我目前正在尝试在没有javascript反序列化器的情况下在silverlight中反序列化以下JSON输出。 我听说有一种方法可以使用JsonArray和LINQ来做到这一点,但我无法弄明白。

{ "Security": { "CIK": "0000789019", "Cusip": "594918104", "Symbol": "MSFT", "ISIN": "US5949181045", "Valoren": "951692", "Name": "Microsoft Corporation", "Market": "NASDAQGS", "CategoryOrIndustry": "TECHNOLOGY", "Outcome": "Success", "Message": null, "Identity": null, "Delay": 0 }, "StartDate": "7/1/2011", "EndDate": "7/6/2011", "Quotes": [{ "Date": "7/5/2011", "Last": 26.03, "Open": 26.1, "LastClose": 26.02, "High": 26.15, "Low": 25.9, "ChangeFromOpen": -0.07, "PercentChangeFromOpen": -0.268, "ChangeFromLastClose": 0.01, "PercentChangeFromLastClose": 0.038, "Volume": 37803000, "SplitRatio": 1, "LastAdjusted": 26.03, "OpenAdjusted": 26.1, "LastCloseAdjusted": 26.02, "HighAdjusted": 26.15, "LowAdjusted": 25.9, "ChangeFromOpenAdjusted": -0.07, "ChangeFromLastCloseAdjusted": 0.01, "VolumeAdjusted": 37803000, "NotTraded": false, "Outcome": "Success", "Message": null, "Identity": null, "Delay": 0 }, { "Date": "7/1/2011", "Last": 26.02, "Open": 25.93, "LastClose": 26, "High": 26.17, "Low": 25.84, "ChangeFromOpen": 0.09, "PercentChangeFromOpen": 0.347, "ChangeFromLastClose": 0.02, "PercentChangeFromLastClose": 0.077, "Volume": 52914500, "SplitRatio": 1, "LastAdjusted": 26.02, "OpenAdjusted": 25.93, "LastCloseAdjusted": 26, "HighAdjusted": 26.17, "LowAdjusted": 25.84, "ChangeFromOpenAdjusted": 0.09, "ChangeFromLastCloseAdjusted": 0.02, "VolumeAdjusted": 52914500, "NotTraded": false, "Outcome": "Success", "Message": null, "Identity": null, "Delay": 0 }], "Outcome": "Success", "Message": null, "Identity": "Cookie", "Delay": 0.014001 } 

在我尝试从Quotes数组中提取DateLastAdjusted并将每个数据放入自己的数组中时,做这样的事情的最佳方法是什么?

这是我将json放到流中的距离:

 downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(downloader_OpenReadCompleted); downloader.OpenReadAsync(serviceUri); } void downloader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { if (e.Error == null) { Stream responseStream = e.Result; //add code here } } 

以下Silverlight代码将采用JSON字符串,将其反序列化为“Listing”对象,然后遍历列表的引号列表以提取Date和LastAdjusted。 确保将System.ServiceModel.Web的引用添加到项目中,以便访问DataContractJsonSerializer (MSDN)类。

C#

 string json = // Your JSON string Listing myListing = DeserializeJSON(json); foreach (Quote quote in listing.Quotes) { DateTime dt = quote.Date; Double lastAdjusted = quote.LastAdjusted; } public Listing DeserializeJSON(string json) { using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Listing)); return (Listing)serializer.ReadObject(ms); } } 

  public class Listing { public Security Security { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public List Quotes { get; set; } } public class Security { public string CIK {get; set;} public string Cusip {get; set;} public string Symbol {get; set;} public string ISIN {get; set;} public string Valoren {get; set;} public string Name {get; set;} public string Market {get; set;} public string CategoryOrIndustry {get; set;} public string Outcome {get; set;} public string Message {get; set;} public string Identity {get; set;} public string Delay { get; set; } } public class Quote { public DateTime Date { get; set; } public Double Last { get; set; } public Double Open { get; set; } public Double LastClose { get; set; } public Double High { get; set; } public Double Low { get; set; } public Double ChangeFromOpen { get; set; } public Double PercentChangeFromOpen { get; set; } public Double ChangeFromLastClose { get; set; } public Double PercentChangeFromLastClose { get; set; } public Double Volume { get; set; } public Double SplitRatio { get; set; } public Double LastAdjusted { get; set; } public Double OpenAdjusted { get; set; } public Double LastCloseAdjusted { get; set; } public Double HighAdjusted { get; set; } public Double LowAdjusted { get; set; } public Double ChangeFromOpenAdjusted { get; set; } public Double ChangeFromLastCloseAdjusted { get; set; } public Double VolumeAintdjusted { get; set; } public bool NotTraded { get; set; } public string Outcome { get; set; } public string Message { get; set; } public string Identity { get; set; } public int Delay { get; set; } } 

您可以在此处了解更多信息: Silverlight中的JSON序列化和反序列化

使用Newtonsoft Json.net库通过JSON构建字典。 然后使用LINQ。