如何在 C# 中获取 Json 的一块?

How to get a piece of Json in c#?

我手里有一个 json,我想从 c# 控制台应用程序中获取这个 json 的一部分。

我想使用 JavaScriptSerializer 反序列化操作,但如果我在此方法中给出完整的 json,我会收到类似无效 json 的错误。这就是为什么我想给这个方法 json 一部分。

我该如何解决?

完整 Json :

{

    "ABCFields": {

    },

    "XYZFields": {

    },

    "OPRFields": {
        "MenuEntity": [

            {
                "id": "89899",
                "title": "Main Menu",
                "link": null,
                "test": "test"
            },
            {
                "id": "2323",
                "title": "Main Menu",
                "link": null,
                "test": "test"
            }

        ]
    }

}

我想达到以下目的;

 [
  {
    "id": "89899",
    "title": "Main Menu",
    "link": null,
    "test": "test"
  },
  {
    "id": "2323",
    "title": "Main Menu",
    "link": null,
    "test": "test"
  }
]

首先,您需要使用以下 class 结构将 JSON 所代表的完整 object 反序列化:

public class ABCFields
{
}

public class XYZFields
{
}

public class MenuEntity
{
    public string id { get; set; }
    public string title { get; set; }
    public object link { get; set; }
    public string test { get; set; }
}

public class OPRFields
{
    public List<MenuEntity> MenuEntity { get; set; }
}

public class RootObject
{
    public ABCFields ABCFields { get; set; }
    public XYZFields XYZFields { get; set; }
    public OPRFields OPRFields { get; set; }
}

这不能被跳过,但由于您将反序列化嵌套的 object,反序列化 JSON 响应中的其他所有内容的性能影响可以忽略不计,不应引起关注。

反序列化时,您可以简单地挑选出嵌套的 object 并忽略其中的所有其他内容 link:

var oprfields = new JsonSerializer...<FullObjectType>().OprFields;

上面的反序列化将取决于您如何称呼您的 parent class。

这是异端,而且是 vb,但是给你:

Function dirty() As Object()
    Dim s As String = "{""ABCFields"":{},""XYZFields"":{},""OPRFields"":{""MenuEntity"":[{""id"":""89899"",""title"":""MainMenu"",""link"":null,""test"":""test""},{""id"":""2323"",""title"":""MainMenu"",""link"":null,""test"":""test""}]}}"
    Dim js As New System.Web.Script.Serialization.JavaScriptSerializer()
    js.MaxJsonLength = Integer.MaxValue
    Dim o = js.DeserializeObject(s)
    Dim theThingYouWant() As Object = o("OPRFields")("MenuEntity")
    Return theThingYouWant
    For Each d As Dictionary(Of String, Object) In theThingYouWant 'for fun
        MsgBox(d("title"))
    Next
End Function