【问题标题】:Dynamically reading .json file with multiple objects动态读取具有多个对象的 .json 文件
【发布时间】:2015-03-31 22:04:00
【问题描述】:

一个应用程序向我提供了一个 .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 是一种可能的工具,但根据我所阅读的内容,我不确定如何动态创建对象。

【问题讨论】:

  • 您将如何处理视图中的这些数据?如果它本质上是动态的,你怎么知道如何处理它?
  • 请在此处将第二个问题(关于将数据传递到视图中)提取到一个新的单独问题中。

标签: c# jquery json json.net


【解决方案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属性装饰每个字段并设置其@ 987654325@ 属性为键的实际名称)。

定义了数据类型,反序列化是单行的:

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

【讨论】:

    【解决方案2】:

    jQuery 让它变得非常简单(只需 jQuery.parseJSON(&lt;your string&gt;);)。

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

    【讨论】:

    • 我发现最好使用 jquery 动态解析 json,而不是为每个对象构建部分视图。使用 jquery 会容易得多,因为我不确定我的 json 文件将包含多少对象,并且每个对象的属性数量也会发生很大变化。
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2020-12-18
    相关资源
    最近更新 更多