Десериализация json с использованием библиотек asp.net - PullRequest
0 голосов
/ 07 июля 2011

В настоящее время я пытаюсь десериализовать следующий вывод JSON в silverlight без десериализатора javascript. Я слышал, что есть способ сделать это, используя 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
}

Каков наилучший подход к выполнению чего-либо подобного, когда я пытаюсь извлечь Date и LastAdjusted из массива Quotes и поместить каждый в свои массивы?

Вот как далеко я смог получить 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
            }
        }

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Следующий код для 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; }
    }

Подробнее можно узнать здесь: Сериализация JSON идесериализация в Silverlight

1 голос
/ 07 июля 2011

Используйте библиотеку Newtonsoft Json.net для создания словаря по вашему JSONЗатем используйте LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...