使用asp.net库反序列化json
本文关键字:反序列化 json net asp 使用 | 更新日期: 2023-09-27 18:01:27
我目前正在尝试在没有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
数组中提取Date
和LastAdjusted
并将它们各自放入自己的数组中,这样做的最佳方法是什么?
下面是我将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<Quote> 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