在不使用类的情况下解析C#中的JSON对象
本文关键字:中的 JSON 对象 情况下 | 更新日期: 2023-09-27 18:29:10
我在一个JSON对象中有两个字符串值。我想在同一个类中调用这个方法,并在不使用类的情况下使用值。
我正在使用以下方法:
public JsonResult Details()
{
return Json(new { Data = "DisplayName", result = "UniqueName" });
}
我需要在另一种方法中使用此数据和结果值。
我得到的值是:
var Details = JsonConvert.SerializeObject(Details());
我的输出是:
{
'"ContentEncoding'": null,
'"ContentType'": null,
'"Data'": {
'"Data'": '"DisplayName'",
'"result'": '"UniqueName'"
},
'"JsonRequestBehavior'": 1,
'"MaxJsonLength'": null,
'"RecursionLimit'": null
}
如何从中获取数据和结果值?
您正在使用的方法(即:)
public JsonResult Details()
{
return Json(new { Data = "DisplayName", result = "UniqueName" });
}
返回一个JsonResult
对象,该对象具有名为Data
的属性,即Details().Data
,其中包含对象包含的数据。因此,为了获得对象的Data
和result
值,您需要再次序列化它。
这是完整的解决方案:
JsonResult json = Details(); // returns JsonResult type object
string ser = JsonConvert.SerializeObject(json.Data); // serializing JsonResult object (it will give you json string)
object dec = JsonConvert.DeserializeObject(ser); // deserializing Json string (it will deserialize Json string)
JObject obj = JObject.Parse(dec.ToString()); // it will parse deserialize Json object
string name = obj["Data"].ToString(); // now after parsing deserialize Json object you can get individual values by key i.e.
string name = obj["Data"].ToString(); // will give Data value
string name = obj["result"].ToString(); // will give result value
希望这能有所帮助。
通过查看JsonConvert.SerializeObject
,我猜您使用的是NewtonSoft
dll。在Newtonsoft.Json.Linq
下有JObject.Parse
,可以导入(using Newtonsoft.Json.Linq;
)。您可以将json字符串解析为
var details = JObject.Parse(your_json_string);
这将给你JObject
,你可以获得的详细信息
var data = details["Data"].ToString();
JsonResult
已经在Data
下为您存储了对象。它还没有序列化,它只是向MVC
框架指示在响应web请求时将其序列化为JSON。
var details = Details().Data;
当然,这将被键入为一个对象——这并不太有用。您可以将其转换回匿名类型,如下所示:
private T CastToAnonymous<T>(object obj, T anonymousType)
{
return (T)obj;
}
var details = CastToAnonymous(Details().Data,
new { Data = string.Empty, result = string.Empty });
然后你可以像。。。
var data = details.Data;
var result = details.result;
它将是类型安全的。