C # Синтаксический анализ JSON-объекта IHttpActionResult, возвращаемого вызовом метода - PullRequest
0 голосов
/ 04 декабря 2018

Я возвращаю объект Json из вызова метода другого метода и хотел бы спросить, как получить доступ к свойствам, созданным в возвращенном объекте Json?

Я понимаю, что мог бы вернуть объект не Json с необходимыми свойствами, однако, как бы я мог получить доступ к анонимному типу, переданному в возвращенный Json

    [HttpPost]
    public IHttpActionResult PhoneReminder([FromUri] RegisterInterest PhoneReminderValues, int RYI_WebID)
     {

            var JsonReturned = object1();
            // access the Json object like this -> JsonReturned.message
            ....
           //rest of code

     }

    public IHttpActionResult object1()
     {
       return new Json(new {message ="hello world"});
     }

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018
Use Nuget Newtonsoft.Json

если предположить, что ваш объект JSON имеет вид:

HttpResponseMessage response;
var jsonObject = await response.Content.ReadAsStringAsync();

Теперь предположим, что у вас есть одно свойство "FirstName" в JSON, к которому вы хотите получить доступ

Вы можете сделать этокак показано ниже:

using Newtonsoft.Json.Linq;

var parsedJsonObject = JObject.Parse(jsonObject);
var firstName =  parsedJsonObject["FirstName"]; 
0 голосов
/ 04 декабря 2018

Получить Newtonsoft.Json от NuGet.

И тогда вы можете сделать это следующим образом:

public async Task<T> GetObjectFromContent<T>(HttpContent content) where T: class
{
    string response = await content.ReadAsStringAsync();
    if (string.IsNullOrWhiteSpace(response))
        return null;

    try
    {
        T obj = JsonConvert.DeserializeObject<T>(response);
        return obj;
    }
    catch(JsonSerializationException)
    {
        return null;
    }          
}

Сначала я получаю строковый ответ от HttpContent.Это действительно просто JSON в строке.Затем используется JsonConvert.DeserializeObject.Конечно, вы должны сначала объявить класс.Например, если у вас есть Json, например:

{
    "FirstName" : "John",
    "SecondName" : "Black"
}

, вам нужно создать класс:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

и вызвать этот метод (GetObjectFromContent) с Person как T. Ваш класс должениметь беспараметрический конструктор.Вы также можете дать разные имена своим свойствам, но вам придется украшать их атрибутом JsonProperty

...