Как получить кусок Json в c #?

У меня есть json в руке, и я хочу получить часть этого json из консольного приложения c #.

Я хочу использовать JavaScriptSerializer Deserialize, но если я дам полный 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"
  }
]

c#,.net,json,javascriptserializer,

-2

Ответов: 2


2 принят

Сначала вам нужно будет выполнить десарализацию до полного объекта, представленного вашим JSON, используя следующую структуру классов:

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; }
}

Это нельзя пропустить, но по мере десериализации вложенного объекта удар производительности десериализации всего остального в ответе JSON является незначительным и не должен вызывать беспокойства.

Когда вы deserialize вы можете просто выбрать вложенный объект и игнорировать все остальное в одной ссылке:

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

Эта десериализация выше будет зависеть от того, что вы называете своим родительским классом.


-1

Это еретик, и это 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
C # ,. сеть, JSON, JavaScriptSerializer,
Похожие вопросы