2016-01-06 15 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; 

這將是類型安全的。