将.json文件加载到c#程序中

我是c#和json对象的新手,我正在尝试将我的网站从基于xml的配置文件移动到基​​于json的配置文件。 有没有办法加载.json文件,以便它变成对象? 我一直在网上搜索,我找不到一个。 我已经将xml文件转换并保存为.json。 我宁愿不使用第三方库。

真的应该使用一个已建立的库,比如Newtonsoft.Json (甚至微软用于MVC和WebAPI等框架),或.NET的内置JavascriptSerializer 。

这是使用Newtonsoft.Json读取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); } 

将json序列化为c#的另一种好方法如下:

 RootObject ro = new RootObject(); try { StreamReader sr = new StreamReader(FileLoc); string jsonString = sr.ReadToEnd(); JavaScriptSerializer ser = new JavaScriptSerializer(); ro = ser.Deserialize(jsonString); } 

你需要在.net 4.0中添加对system.web.extensions的引用,这是在程序文件(x86)>引用程序集> framework> system.web.extensions.dll中,你需要确保你只使用常规4.0框架不是4.0客户端

正如在另一个答案中提到的,我建议使用json.NET。 您可以使用NuGet下载该软件包。 然后将您的json文件反序列化为C#对象,您可以执行类似的操作;

  JsonSerializer serializer = new JsonSerializer(); MyObject obj = serializer.Deserialize(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" } 

我更喜欢使用generics反序列化方法,它将json反序列化为一个对象,假设你为它提供了一个与json相匹配的类型。 如果它们之间存在差异,它可能会抛出,或者没有设置值,或者只是忽略json中的内容,取决于问题所在。 如果json定义与C#类型定义完全匹配,那么它就可以正常工作。

请参阅Microsofts JavaScriptSerializer

异步通信层在内部使用JavaScriptSerializer类来序列化和反序列化在浏览器和Web服务器之间传递的数据。 您无法访问该序列化程序的实例。 但是,此类公开了一个公共API。 因此,如果要在托管代码中使用JavaScript Object Notation(JSON),则可以使用该类。

命名空间 :System.Web.Script.Serialization

程序集 :System.Web.Extensions(在System.Web.Extensions.dll中)

使用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 ro = JsonConvert.DeserializeObject>(json); } Console.WriteLine(ro[0].url_short); } } 

注意:看下面的链接我也回答了与此类似的问题。它将为您提供全面的帮助如何在C#中解析示例字符串