在不使用类的情况下解析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
}

如何从中获取数据和结果值?

在不使用类的情况下解析C#中的JSON对象

您正在使用的方法(即:)

public JsonResult Details()
{
    return Json(new { Data = "DisplayName", result = "UniqueName" });
}

返回一个JsonResult对象,该对象具有名为Data的属性,即Details().Data,其中包含对象包含的数据。因此,为了获得对象的Dataresult值,您需要再次序列化它。

这是完整的解决方案:

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;

它将是类型安全的。