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

时间:2013-08-30 17:28:26

标签: c# json

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

6 个答案:

答案 0 :(得分:56)

真的 应该使用已建立的库,例如Newtonsoft.Json(甚至微软用于MVC和WebAPI等框架)或.NET构建-in 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);
}

答案 1 :(得分:8)

将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)&gt;中。参考组件&gt;框架&GT; system.web.extensions.dll,你需要确保你只使用常规4.0框架而不是4.0客户端

答案 2 :(得分:6)

如其他答案所述,我建议使用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"
}

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

答案 3 :(得分:1)

参见微软JavaScriptSerializer

  

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

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

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

答案 4 :(得分:1)

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

注意:看下面的链接我也回答了类似的问题。这对你来说会很有帮助 How to Parse an example string in C#

答案 5 :(得分:0)

我已经做到了:

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

此外,您可以使用sr.ReadToEndAsync()之类的异步调用来执行此操作。 以Newtonsoft.Json为参考。

希望,这会有所帮助。