使用StringContent访问HttpResponseMessge内部的JSON对象

时间:2018-09-30 22:49:02

标签: c# json http

我在访问使用StringContent创建的HttpResponseMessage内部的JSON对象时遇到问题。

这是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 :(得分: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;
}

答案 1 :(得分:0)

应该真正让模型绑定器发挥其预期的作用,而不是尝试自己解析JSON。

    disp    x
1   60-80   33.9
2   80-100  30.4
3   100-120 32.4
4   120-140 27.3
5   140-160 30.4

根据提供的JSON定义作业的位置

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

        //...do something with model

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

模型绑定器将解析传入的JSON,并填充定义为匹配所需数据的强类型对象模型。