簡體   English   中英

使用 asp.net 庫反序列化 json

[英]Deserializing json using asp.net libraries

我目前正在嘗試反序列化 silverlight 中的以下 JSON output 沒有 ZDE9B9ED70D7E2E1ZEFFEEF2Z1。 我聽說有一種方法可以使用 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並將每個放入自己的 arrays 的情況下,執行此類操作的最佳方法是什么?

這是我將 json 放入 stream 的過程:

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 字符串,將其反序列化為“列表”object,然后遍歷列表的引號列表以提取日期和 LastAdjusted。 確保向您的項目添加對 System.ServiceModel.Web 的引用,以便訪問DataContractJsonSerializer (MSDN) class。

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM