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

for*_*ect 32 c# json

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

STW*_*STW 63

真的应该使用一个已建立的库,比如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);
}
Run Code Online (Sandbox Code Playgroud)

  • @inquisitiveIdiot我更喜欢Newtonsoft的实现.只是要指出我不喜欢你的示例代码中的使用.当你可以使用更简单,更清晰,更安全的`Deserialize <T>(string rawJson)方法时,为什么要动态处理它?此外,您可以使用`File.ReadAllText(string filepath)`来简化文件IO. (3认同)
  • 嗯......显然OP不应该*写自己的*.但是如果他想要一个实现这个功能的框架类,那么[`JavaScriptSerializer`](http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx)就可以了. (2认同)

for*_*ect 10

将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);


   }
Run Code Online (Sandbox Code Playgroud)

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


eva*_*nal 5

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

   JsonSerializer serializer = new JsonSerializer();
   MyObject obj = serializer.Deserialize<MyObject>(File.ReadAllText(@".\path\to\json\config\file.json");
Run Code Online (Sandbox Code Playgroud)

上面的代码假设你有类似的东西

public class MyObject
{
    public string prop1 { get; set; };
    public string prop2 { get; set; };
}
Run Code Online (Sandbox Code Playgroud)

而你的json看起来像;

{
      "prop1":"value1",
      "prop2":"value2"
}
Run Code Online (Sandbox Code Playgroud)

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

  • 当我尝试构建时,没有采用“字符串”的“反序列化”方法。 (6认同)