首页 > 解决方案 > C# 解析方法调用返回的 IHttpActionResult Json 对象

问题描述

我从另一个方法中的方法调用返回一个 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"});
     }

标签: c#jsonjson.netasp.net-web-api2

解决方案


从 NuGet 获取 Newtonsoft.Json。

然后你可以这样做:

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

并使用 Person 作为 T 调用此方法 (GetObjectFromContent)。您的类应该有一个无参数的构造函数。您还可以为您的属性指定不同的名称,但您必须使用属性 JsonProperty 来装饰它们


推荐阅读