Я новичок в объектах С# и json, и я пытаюсь переместить мой веб-сайт из файлов конфигурации на основе xml на json based. Есть ли способ загрузить файл .json так, чтобы он превращался в объект? Я искал в Интернете, и я не могу найти его. У меня уже есть xml файл, преобразованный и сохраненный как .json. Я бы предпочел не использовать стороннюю библиотеку.
Загрузка файла .json в программу С#
Ответ 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);
}
}
Примечание. Посмотрите ниже ссылку, также я ответил на вопрос, подобный этому. Это будет полная помощь для вас Как проанализировать строку примера в С#