Слои синтаксического анализа JSON в C# - PullRequest
0 голосов
/ 27 мая 2020

Я погуглил, но не нашел удовлетворительного ответа. В настоящее время я изучаю C# и фреймворк. Net (я работаю как fullstack-dev с Javascript / node) для удовольствия, но я не уверен, как вы правильно go о разборе JSON из http-запрос в следующей структуре:

{
    "result": {
        "data": {
            "type": "articles",
            "time": "05/27/2020",
            "attributes": {
                "timezone": "UTC",
                 "length": "3",
            },
            "articles": [
                { "type": "news", "created": "04/26/2019", "author": "Dohn Joe" },
                { "type": "news", "created": "04/26/2019", "author": "Dohn Joe" },
                { "type": "news", "created": "04/26/2019", "author": "Dohn Joe" }
            ]
        }
    }
}

Я хочу получить и использовать массив статей (возможно, превратить его в класс, который его хранит / отправляет в базу данных или что-то в этом роде). В настоящее время я получаю http-запрос, а затем превращаю его в JSON

dynamic jsonResponse = JObject.Parse(result);

А затем, в javascript, вы обычно выполняете оператор if, чтобы вроде бы подтвердить, что вы получили ожидаемый ответ.

if (jsonResponse &&
    jsonResponse.result &&
    jsonResponse.result.data &&
    jsonResponse.result.data.articles &&
    jsonResponse.result.data.articles.length) {
    //Parse the articles
}

Я читал о способах в C#, где вы создаете «многоуровневые» классы, которые следуют схеме JSON, а затем просто превращаете весь ответ в класс / объект. Это кажется странным, поскольку меня интересует только часть статей и больше ничего, поэтому я хочу проверить, существуют ли статьи на самом деле.

Используется ли тот же оператор if (более или менее) для проверки правильности этого в C#, или есть какой-либо другой стандартный способ сделать это, о котором я еще не читал? Или, может быть, чаще всего используется многоуровневый подход, просто мне это кажется странным? Но даже если я превращу его в класс / объект, мне все равно нужно будет проверить, действительно ли элементы там есть, верно? Я также видел, как люди просто обертывали это в try-catch, а затем пытались получить доступ к статьям без операторов if, позволяя try-catch решать любые проблемы. Я немного запутался в разных ответах, которые я читал, как правильно обрабатывать ответ json на HTTP-запрос в этом случае?

Помощь очень ценится! Спасибо.

1 Ответ

0 голосов
/ 27 мая 2020

Вы можете преобразовать JSON в List / ViewModel в C# / ASP. NET MVC, как показано ниже:

public ActionResult Save(string json)
{ 
  IList<DemoViewModel> model = new
      JavaScriptSerializer().Deserialize<IList<DemoViewModel>>(json);

  //or

  List<DemoViewModel> model = new 
      JavaScriptSerializer().Deserialize<List<DemoViewModel>>(json);
}

Вы можете передавать данные для преобразования Json через Ajax, как показано ниже:

$.ajax({
  type: "POST",
  url: '@Url.Action("Save", "DemoContoller")',
  cache: false,
  dataType: "json",
  data: { json: JSON.stringify(demoData), "__RequestVerificationToken": $('input[name=__RequestVerificationToken]').val() },

  //...
});
...