在不使用类的情况下解析c#中的Json对象

时间:2016-01-06 05:07:15

标签: c# json

嗨我在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}

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

3 个答案:

答案 0 :(得分:7)

您正在使用的方法,即:

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

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

这是完整的解决方案:

JsonResult json = Details(); // return 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

希望这有帮助。

答案 1 :(得分:6)

通过查看JsonConvert.SerializeObject,我猜您使用的是NewtonSoft dll。您可以在JObject.ParseNewtonsoft.Json.Linq导入using Newtonsoft.Json.Linq;var details = JObject.Parse(your_json_string);。您可以将该json字符串解析为

JObject

这将为您提供var data = details["Data"].ToString();,您可以获取详细信息

&.

答案 2 :(得分:1)

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;

它将是类型安全的。

相关问题