2016-01-06 17 views
0

嗨我在json对象中有两个字符串值。我想在同一个类中调用此方法,并在不使用类的情况下使用这些值。在c#中解析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}

我如何从这个获取数据和结果值?

+0

具体。显示你到目前为止所尝试的内容,并发布明确的问题陈述。 – Mangesh

+0

我已经尝试通过下面的方法来获取数据值。但是我收到了我在下面提到的错误。 var Details = JsonConvert。SerializeObject(详细资料()); 详情[“Data”]; 'string'不包含'data'的定义,并且没有可以找到接受'string'类型的第一个参数的扩展方法'data'(你缺少using指令还是程序集引用?) details [数据“] – Shesha

+0

'Serialize'会给你一个字符串,如果你想得到像属性这样的东西,而且它是值类型的,那么数据需要以对象的形式存在。尝试'反序列化'那个字符串。 – Bharadwaj

回答

3

您正在使用即的方法:

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

返回其中有一个名为“数据”即()的详细数据,包含你的对象包含您的数据属性JsonResult对象。因此,为了让您的对象[数据和结果值]你需要再次序列化即

这是完整的解决方案:

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 

希望这有助于。

4

通过查看JsonConvert.SerializeObject,我猜你正在使用NewtonSoft dll。在那里你有JObject.ParseNewtonsoft.Json.Linq下你可以导入(using Newtonsoft.Json.Linq;)。您可以解析JSON字符串作为

var details = JObject.Parse(your_json_string);

这会给你JObject,你可以得到的细节

var data = details["Data"].ToString();

+0

嗨,如果我有多个数据里面的json对象,如何获取该值? 公共JsonResult细则() \t { \t返回 \t JSON( \t新 \t { \t数据= \t“{ '显示名称': '显示名1', '名称': '的唯一名称1'} ,{'displayname':'display name 2','name':'Unique name 2'}“ \t}); \t} – Shesha

+0

即使我不得不通过尝试它。我对此不太了解。 – Bharadwaj

0

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; 

这将是类型安全的。