Подтвердить что ты не робот

Загрузка файла .json в программу С#

Я новичок в объектах С# и json, и я пытаюсь переместить мой веб-сайт из файлов конфигурации на основе xml на json based. Есть ли способ загрузить файл .json так, чтобы он превращался в объект? Я искал в Интернете, и я не могу найти его. У меня уже есть xml файл, преобразованный и сохраненный как .json. Я бы предпочел не использовать стороннюю библиотеку.

4b9b3361

Ответ 1

Вы действительно должны использовать созданную библиотеку, такую ​​как Newtonsoft.Json (которую даже Microsoft использует для таких фреймворков, как MVC и WebAPI), или встроенный JavascriptSerializer.

Здесь приведен пример чтения JSON с использованием Newtonsoft.Json:

JObject o1 = JObject.Parse(File.ReadAllText(@"c:\videogames.json"));

// read JSON directly from a file
using (StreamReader file = File.OpenText(@"c:\videogames.json"))
using (JsonTextReader reader = new JsonTextReader(file))
{
  JObject o2 = (JObject) JToken.ReadFrom(reader);
}

Ответ 2

Еще один хороший способ сериализации json в С# ниже:

RootObject ro = new RootObject();
     try
    {

        StreamReader sr = new StreamReader(FileLoc);
        string jsonString = sr.ReadToEnd();
        JavaScriptSerializer ser = new JavaScriptSerializer();
        ro = ser.Deserialize<RootObject>(jsonString);


   }

вам нужно добавить ссылку на system.web.extensions в .net 4.0, это в программных файлах (x86) > сборках ссылок > framework > system.web.extensions.dll, и вы должны быть уверены, что используете просто регулярный 4.0 framework не 4.0 клиент

Ответ 3

Как уже упоминалось в другом ответе, я бы рекомендовал использовать json.NET. Вы можете загрузить пакет с помощью NuGet. Затем, чтобы десериализовать ваши json файлы на объекты С#, вы можете сделать что-то вроде:

   JsonSerializer serializer = new JsonSerializer();
   MyObject obj = serializer.Deserialize<MyObject>(File.ReadAllText(@".\path\to\json\config\file.json");

В приведенном выше коде предполагается, что у вас есть что-то вроде

public class MyObject
{
    public string prop1 { get; set; };
    public string prop2 { get; set; };
}

И ваш json выглядит следующим образом:

{
      "prop1":"value1",
      "prop2":"value2"
}

Я предпочитаю использовать общий метод десериализации, который десериализует json в объект, предполагая, что вы предоставляете ему тип, определение которого соответствует json's. Если есть расхождения между ними, они могут бросать или не устанавливать значения или просто игнорировать вещи в json, зависит от проблемы. Если определение json точно соответствует определению типов С#, то оно просто работает.

Ответ 4

См. Microsoft JavaScriptSerializer

Класс JavaScriptSerializer используется внутренне асинхронным уровня связи для сериализации и десериализации данных, которые между браузером и веб-сервером. Вы не можете получить доступ к этому экземпляр сериализатора. Однако этот класс предоставляет публичный API. Поэтому вы можете использовать класс, когда хотите работать с JavaScript Обозначение объекта (JSON) в управляемом коде.

Пространство имен: System.Web.Script.Serialization

Сборка: System.Web.Extensions(в System.Web.Extensions.dll)

Ответ 5

Используйте Server.MapPath для получения фактического пути к файлу JSON и загрузки и чтения файла с помощью StreamReader

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

public class RootObject
{
    public string url_short { get; set; }
    public string url_long { get; set; }
    public int type { get; set; }
}

public class Program
{
    static public void Main()
    {
       using (StreamReader r = new StreamReader(Server.MapPath("~/test.json")))
       {
           string json = r.ReadToEnd();
           List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(json);
       }

    Console.WriteLine(ro[0].url_short);                 
    }  
}

Примечание. Посмотрите ниже ссылку, также я ответил на вопрос, подобный этому. Это будет полная помощь для вас Как проанализировать строку примера в С#