Я новичок в объектах C# и json, и я пытаюсь переместить мой веб-сайт из файлов конфигурации на основе xml на json based. Есть ли способ загрузить файл .json так, чтобы он превращался в объект? Я искал в Интернете, и я не могу найти его. У меня уже есть xml-файл, преобразованный и сохраненный как .json. Я бы предпочел не использовать стороннюю библиотеку.Загрузка файла .json в программу C#
ответ
Вы действительно должны использовать установленную библиотеку, например Newtonsoft.Json (который использует даже Microsoft для систем, таких как MVC и WebAPI) или .NET встроенный 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);
}
Ну ... obviuosly OP не должен * писать свой собственный *. Но если ему нужен класс framework, который реализует эту функциональность, [JavaScriptSerializer] (http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx) будет работать. –
Я загрузил NewtonSoft, но не хотел, чтобы кто-то кричал на меня за использование внешней библиотеки. –
@inquisitiveIdiot Я неправильно понял и думал, что вы намереваетесь написать свой собственный. Встроенный JavascriptSerializer подходит для большинства случаев использования, но Newtonsoft работает очень быстро и полно. – STW
См Microsofts JavaScriptSerializer
Класс JavaScriptSerializer используется внутри асинхронного слоя связи для сериализации и десериализации данных, между браузером и веб-сервером. Вы не можете получить доступ к этому экземпляру сериализатора. Однако этот класс предоставляет публичный API. Следовательно, вы можете использовать класс, если хотите работать с JavaScript. Обозначение объекта (JSON) в управляемом коде.
пространство имен: System.Web.Script.Serialization
Ассамблея: System.Web.Extensions (в System.Web.Extensions.dll)
JSON (вопреки распространенному мнению) * не * подмножество Javascript, см., Например, https://medium.com/joys-of-javascript/json-js-42a28471221d – Nubok
Как уже упоминалось в другом ответе Я бы рекомендовал использовать json.NET. Вы можете загрузить пакет с помощью NuGet. Затем, чтобы десериализовать ваши json-файлы на объекты C#, вы можете сделать что-то вроде:
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 х. Если есть расхождения между ними, они могут бросать или не устанавливать значения или просто игнорировать вещи в json, зависит от проблемы. Если определение json точно соответствует определению типов C#, то оно просто работает.
отсутствует закрывающий) парс на второй строке. – redwards510
Еще один хороший способ сериализации JSON в C# ниже:
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 находится в Program Files (x86)> эталонные сборки> framework> system.web.extensions.dll, и вам нужно быть уверенным, что вы используете только обычный 4.0 framework, а не клиент 4.0
не забудьте sr.Close(); – user3704628
Использовать сервер.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);
}
}
Примечания: Посмотрите ссылку ниже я также ответил на вопрос, подобного this.It будет помогать вам полный How to Parse an example string in C#
импорт System.IO. Ваш код не создается. – thang
Возможный дубликат? См. Http://stackoverflow.com/questions/4521239/deserializing-json-using-c-sharp – SolarBear
'Я искал в Интернете, и я не могу найти, что вам трудно поверить ... – I4V
справедливо, я нашел некоторые из этот подобный материал, но я пробовал их решения, и он не работал. Теперь сделаем некоторый прогресс –