Доступ к объекту JSON внутри HttpResponseMessge с использованием StringContent

2

У меня проблема с доступом к объекту JSON внутри HttpResponseMessage, который создается с помощью StringContent.

Вот как выглядят объекты JSON:

{
    "object": "JOB",
    "entry": [
        {
            "uuid": "1nufisnfiu3-dn3u2irb-dn3ui2fb9-nui2",
            "changed_fields": [
                "status"
            ],
            "time": "2018-09-30 21:57:02"
        }
    ],
    "resource_url": "https://somewebsiteAPI.com/api_1.0/Jobs/1nufisnfiu3-dn3u2irb-dn3ui2fb9-nui2.json"
}

Здесь мой контроллер:

[HttpPost]
        public async Task<HttpResponseMessage> Post()
        {

            string result = await Request.Content.ReadAsStringAsync();
            var resp = new HttpResponseMessage(HttpStatusCode.OK);
            resp.Content = new StringContent(result, System.Text.Encoding.UTF8, "application/json");

            return resp;
        }

Моя цель здесь - получить объект resource_url json.

Любая помощь будет так высоко оценена! Спасибо!

  • 2
    В чем проблема или сообщение об ошибке?
  • 0
    Ничего. Просто он возвращает весь объект JSON, но я хочу получить это Resource_URL
Теги:
http

2 ответа

0

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

[HttpPost]
public async Task<IHttpActionResult> Post([FromBody]Job model) {
    if(ModelState.IsValid) {

        //...do something with model

        return Ok(model.ResourceUrl);
    }
    return BadRequest(ModelState);
}

Где Job определяется из предоставленного JSON

public partial class Job {
    [JsonProperty("object")]
    public string Object { get; set; }

    [JsonProperty("entry")]
    public Entry[] Entry { get; set; }

    [JsonProperty("resource_url")]
    public Uri ResourceUrl { get; set; }
}

public partial class Entry {
    [JsonProperty("uuid")]
    public string Uuid { get; set; }

    [JsonProperty("changed_fields")]
    public string[] ChangedFields { get; set; }

    [JsonProperty("time")]
    public DateTimeOffset Time { get; set; }
}

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

0

Вы должны позволить JSON строке быть объектом, а затем получить значение resource_url.

Я бы использовал Json.net, чтобы это сделать.

  1. Создайте свою модель для данных Json.

выглядят так.

public class Entry
{
    public string uuid { get; set; }
    public List<string> changed_fields { get; set; }
    public string time { get; set; }
}

public class RootObject
{
    public List<Entry> entry { get; set; }
    public string resource_url { get; set; }
}
  1. метод JsonConvert.DeserializeObject позволяет модели JSON моделировать.

затем получить модель resource_url свойство и передать в качестве параметра в StringContent.

[HttpPost]
public async Task<HttpResponseMessage> Post()
{

    string result = await Request.Content.ReadAsStringAsync();
    var resp = new HttpResponseMessage(HttpStatusCode.OK);
    var model = JsonConvert.DeserializeObject<RootObject>(result);
    resp.Content = new StringContent(model.resource_url, System.Text.Encoding.UTF8, "application/json");
    return resp;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню