动态读取具有多个对象的.json文件

时间:2015-03-31 22:04:01

标签: c# jquery json json.net

应用程序正在为我提供一个包含未知数量对象的.json文件。最重要的是,对象内容也会发生很大变化。

以下是json文件的示例:

{  
   "AVRunning":{  
      "Description":"Symantec Antivirus Service",
      "Status":true
   },
   "CorrectOU":{  
      "Description":"Server in Correct OU",
      "Status":true
   },
   "RoleAdGroups":{  
      "Result":true,
      "Group":"Server-Admin"
   },
   "DefaultAdGroups":[  
      {  
         "Result":true,
         "Group":"Domain Admins"
      },
      {  
         "Result":true,
         "Group":"Server-Admins"
      },
      {  
         "Result":true,
         "Group":"SERVERNAME-ADMINS"
      }
   ]
}

这只是一个json文件的示例。它可能包含更多对象,以及其中未知数量的内容。

我的问题是,一旦我将内容作为一个巨大的字符串读取,我如何将其序列化为c#中的JSON对象?

另外,我可能会过程复杂化这个过程。一旦我读到这个,我想将数据传递给我的视图。如果在c#中无法做到这一点,那么在Jquery中更容易吗?或者首先应该在那里完成?我正在读的文件是本地文件,因此我无法直接在jquery中访问数据。

我知道JSON.NET是一个可能的工具,但从我读过的内容来看,我不确定如何动态创建对象。

2 个答案:

答案 0 :(得分:1)

您必须定义要将json字符串反序列化的数据类型:

public class ObjectWithDescriptionAndStatus
{
    public string Description;
    public string Status;
}

public class ObjectWithResultAndGroup
{
    public bool Result;
    public string Group;
}

public class MyObject
{
    public ObjectWithDescriptionAndStatus AVRunning;
    public ObjectWithDescriptionAndStatus CorrectOU;
    public ObjectWithResultAndGroup RoleAdGroups;
    public IList<ObjectWithResultAndGroup> DefaultAdGroups;
}

这是最简单的示例,所有字段都标记为public,并且在json中完全命名为键(它们可以具有任意名称,但在这种情况下,您必须使用DataMember属性装饰每个字段并将其Name属性设置为密钥的实际名称。

定义了数据类型后,反序列化就是一个单行程序:

MyObject myObject = Newtonsoft.Json.JsonConvert.DeserializeObject<MyObject>(json);

答案 1 :(得分:-1)

jQuery使它非常简单(仅jQuery.parseJSON(<your string>);)。

我想JSON.NET也有一个解析函数,但我没有使用过该库,所以我不能肯定地说!