Разбор данных JSON с помощью C # - PullRequest
7 голосов
/ 05 ноября 2010

У меня есть около 7000 строк данных JSON, которые я хочу проанализировать.Пример только его части можно увидеть здесь .Я использовал WebRequest и StreamReader, чтобы поместить все данные в строку.(Как ни странно, все данные помещаются в одну ОЧЕНЬ длинную строку).Но сейчас я хочу разобрать это и не знаю как.Может кто-нибудь объяснить, как использовать Deserialize?Я анализировал данные JSON с Java раньше, но у меня возникли проблемы с C #, особенно из-за моей неспособности найти документацию с четкими примерами.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

18 голосов
/ 05 ноября 2010

Попробуйте JSON.Net , если вы этого не видели, это должно вам помочь.

Библиотека Json.NET упрощает работу с данными в формате JSON в .NET.Основные функции включают гибкий сериализатор JSON для быстрого преобразования классов .NET в JSON и обратно и LINQ в JSON для чтения и записи JSON.

Обсуждается десериализация здесь .

Самый быстрый способ преобразования текста JSON в объект .NET - использование JsonSerializer.JsonSerializer преобразует объекты .NET в их эквивалент JSON и обратно.

Базовая структура кода для десериализации приведена ниже - Target все еще необходимо заполнить, чтобы захватить остальные проанализированные элементы данныхс соответствующим типом.Упомянутый файл json.txt содержит ваши данные из приведенного выше URL.

using System;
using System.IO;
using Newtonsoft.Json;

public class NameAndId
{
    public string name;
    public int id; 
}

public class Data
{
    public NameAndId[] data;
}

public class Target
{
    public string id;
    public NameAndId from;
    public Data likes;
}

public class Program
{
    static void Main(string[] args)
    {
        string json = File.ReadAllText(@"c:\temp\json.txt");
        Target newTarget = JsonConvert.DeserializeObject<Target>(json);
    }
}

Вот первая часть потока JSON для справки:

{
   "id": "367501354973",
   "from": {
      "name": "Bret Taylor",
      "id": "220439"
   },
   "message": "Pigs run from our house in fear. Tonight, I am wrapping the pork tenderloin in bacon and putting pancetta in the corn.",
   "updated_time": "2010-03-06T02:57:48+0000",
   "likes": {
      "data": [
         {
            "id": "29906278",
            "name": "Ross Miller"
         },
         {
            "id": "732777462",
            "name": "Surjit Padham"
         },
9 голосов
/ 05 ноября 2010

Лично мне не нравится носить с собой зависимости от внешних библиотек, когда функциональность обеспечивается платформой.В этом случае класс JavaScriptSerializer:

var serializer = new JavaScriptSerializer();

var myobj = serializer.Deserialize<MyType>(mystring);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...