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

本文关键字:程序 加载 json 文件 | 更新日期: 2023-09-27 18:29:37

我正试图将我的网站从基于XML的配置文件转移到基于JSON的配置文件。有没有办法在中加载.json文件,使其变成对象?我一直在网上搜索,但找不到。我已经将.xml文件转换并保存为.json。我宁愿不使用第三方图书馆。

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

实际上应该使用一个已建立的库,如Newtonsoft.Json(甚至Microsoft也将其用于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<RootObject>(jsonString);

   }

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

正如在另一个答案中提到的,我建议使用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#类型定义完全匹配,那么它就可以工作了。

使用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);                 
    }  
}

注意:看下面的链接,我也回答了类似的问题。这将对你有很大帮助如何在C#中解析示例字符串

我这样做了:

            using (StreamReader sr = File.OpenText(jsonFilePath))
            {
                var myObject = JsonConvert.DeserializeObject<List<YourObject>>(sr.ReadToEnd());
            }

此外,您还可以使用异步调用(如:sr.ReadToEndAsync())来完成此操作。以Newtonsoft.Json为参考。

希望,这有帮助。

请参阅微软的JavaScriptSerializer

JavaScriptSerializer类由异步通信层,用于序列化和反序列化在浏览器和Web服务器之间传递。您无法访问序列化程序的实例。但是,这个类公开了一个公共的API。因此,当您想使用JavaScript时,可以使用该类托管代码中的对象表示法(JSON)。

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

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