如何在 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
我手里有一个 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