C#解析方法调用返回的IHttpActionResult Json对象

C#解析方法调用返回的IHttpActionResult Json对象,c#,json,json.net,asp.net-web-api2,C#,Json,Json.net,Asp.net Web Api2,我正在从另一个方法中的方法调用返回一个Json对象,并想问如何访问在返回的Json对象中创建的属性 我知道我可以返回具有所需属性的非Json对象,但是如何访问传递到返回的Json中的匿名类型 [HttpPost] public IHttpActionResult PhoneReminder([FromUri] RegisterInterest PhoneReminderValues, int RYI_WebID) { var JsonRetur

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

从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;
    }          
}
然后您必须创建一个类:

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

Use Nuget Newtonsoft.Json
假设您的JSON对象如下:

HttpResponseMessage response;
var jsonObject = await response.Content.ReadAsStringAsync();
现在假设JSON中有一个要访问的属性“FirstName”

您可以按如下方式进行操作:

using Newtonsoft.Json.Linq;

var parsedJsonObject = JObject.Parse(jsonObject);
var firstName =  parsedJsonObject["FirstName"]; 

这看起来像是@DanielShillCheck的作业。如果对象是用JSON.net序列化的,那么反序列化对象可以工作,我可以访问上面示例中的message属性,但是如何访问IHttpActionResult JSON对象?为什么不从
object1()移动逻辑
out进入返回对象的私有方法,让
object1()调用该私有方法并返回结果?然后在
phonerementer
中,您也可以调用相同的私有方法,这样您就不必进行无意义的JSON序列化deserialisation@succeed这是一个隐藏着更深层次问题的问题。如果两个操作属于同一个ApiController,那么共享功能可以提取到它自己的功能/服务中,并由两个操作使用。实际上不需要在控制器中进行所有繁重的序列化和反序列化。查看当前的设计选项。@p3tch是,这是一个解决方案,但是出于一致性目的和一般利益,是否有方法访问返回的Json对象?我还可以返回JsonConvert.SerializeObject();然后反序列化JsonConvert.DeserializeObject();然而,我感兴趣的是专门访问传入示例中返回的Json方法的匿名类型
using Newtonsoft.Json.Linq;

var parsedJsonObject = JObject.Parse(jsonObject);
var firstName =  parsedJsonObject["FirstName"];