C#解析方法调用返回的IHttpActionResult Json对象
我正在从另一个方法中的方法调用返回一个Json对象,并想问如何访问在返回的Json对象中创建的属性 我知道我可以返回具有所需属性的非Json对象,但是如何访问传递到返回的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
[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"];