提问者:小点点

将。json文件加载到C#程序中


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


共3个答案

匿名用户

您确实应该使用一个已建立的库,如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的引用,该引用位于program files(x86)中&>;引用程序集(&>;框架(>);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#types定义完全匹配,那么它就能正常工作。