2014-07-17 54 views
1

以下是JSON字符串:如何從C#中的Json字符串中讀取特定的Json對象?

{ 
"ios_info": { 
    "serialNumber": "F2LLMBNJFFF", 
    "imeiNumber": "01388400413235", 
    "meid": "", 
    "iccID": "8901410427640096045", 
    "firstUnbrickDate": "11/27/13", 
    "lastUnbrickDate": "11/27/13", 
    "unbricked": "true", 
    "unlocked": "false", 
    "productVersion": "7.1.2", 
    "initialActivationPolicyID": "23", 
    "initialActivationPolicyDetails": "US AT&T Puerto Rico and US Virgin Islands Activation Policy", 
    "appliedActivationPolicyID": "23", 
    "appliedActivationDetails": "US AT&T Puerto Rico and US Virgin Islands Activation Policy", 
    "nextTetherPolicyID": "23", 
    "nextTetherPolicyDetails": "US AT&T Puerto Rico and US Virgin Islands Activation Policy", 
    "macAddress": "ACFDEC6C988A", 
    "bluetoothMacAddress": "AC:FD:EC:6C:98:8B", 
    "partDescription": "IPHONE 5S SPACE GRAY 64GB-USA" 
}, 
"fmi": { 
    "@attributes": { 
     "version": "1", 
     "deviceCount": "1" 
    }, 
    "fmipLockStatusDevice": { 
     "@attributes": { 
      "serial": "F2LLMBNJFFFQ", 
      "imei": "013884004132355", 
      "isLocked": "true", 
      "isLost": "false" 
     } 
    } 
}, 
"product_info": { 
    "serialNumber": "F2LLMBNJFFFQ", 
    "warrantyStatus": "Apple Limited Warranty", 
    "coverageEndDate": "11/25/14", 
    "coverageStartDate": "11/26/13", 
    "daysRemaining": "498", 
    "estimatedPurchaseDate": "11/26/13", 
    "purchaseCountry": "United States", 
    "registrationDate": "11/26/13", 
    "imageURL": "http://service.info.apple.com/parts/service_parts/na.gif", 
    "explodedViewURL": "http://service.info.apple.com/manuals-ssol.html", 
    "manualURL": "http://service.info.apple.com/manuals-ssol.html", 
    "productDescription": "iPhone 5S", 
    "configDescription": "IPHONE 5S GRAY 64GB GSM", 
    "slaGroupDescription": "", 
    "contractCoverageEndDate": "11/25/15", 
    "contractCoverageStartDate": "11/26/13", 
    "contractType": "C1", 
    "laborCovered": "Y", 
    "limitedWarranty": "Y", 
    "partCovered": "Y", 
    "notes": "Covered by AppleCare+ - Incidents Available", 
    "acPlusFlag": "Y", 
    "consumerLawInfo": { 
     "serviceType": "", 
     "popMandatory": "", 
     "allowedPartType": "" 
    } 
} 
} 

讀入Key:Value ALLJSON並顯示在表格的格式,但我只需要特定對象即FMI節只JSON字符串的

private string GetKeyValuePairs(string jsonString) 
    { 
     var resDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString); 
     string sdict = string.Empty; 
     string fmitxt = string.Empty; 
     string fmitxt2 = string.Empty; 
     foreach (string key in resDict.Keys) 
     { 
      sdict += "<tr><td> " + key + "</td> " + (resDict[key].GetType() == typeof(Newtonsoft.Json.Linq.JObject) ? "<td>" + GetKeyValuePairs(resDict[key].ToString()) + "</td></tr>" : "<td>" + resDict[key].ToString() + "</td></tr>"); 

     } 
     return sdict; 
    } 

問題:

我要只讀「fmi」部分的所有內容。並在顯示鍵:值。表格式

注: 我使用框架3.5因此不能使用dynamic關鍵字。 有什麼想法?

回答

1

我建議你使用它作爲一個JObject直接;如果您使用的是dynamic,則這是您將在幕後使用的課程。此外,您需要從遞歸調用中完成的正常路徑中分離出fmi的選擇:這裏是我的Main

void Main() 
{ 
    var resObj = JsonConvert.DeserializeObject<JObject>(jsonString); 
    var result = GetKeyValuePairs((JObject)resObj["fmi"]); 
} 
private string GetKeyValuePairs(JObject resObj) 
{ 
    string sDict = string.Empty; 
    string fmitxt = string.Empty; 
    string fmitxt2 = string.Empty; 
    foreach (var pair in resObj) 
    { 
     sDict += "<tr><td> " + pair.Key + "</td>"; 
     if (pair.Value is JObject) 
     sDict += "<td>" + GetKeyValuePairs((JObject)pair.Value) + "</td></tr>"; 
     else 
     sDict += "<td>" + pair.Value.ToString() + "</td></tr>"; 
    } 
    return sDict; 
} 
+0

什麼是「轉儲()」它是3.5中的關鍵字?我沒有得到你的代碼!引發錯誤! :( –

+0

@SHEKHARSHETE糟糕,這是我在LINQPad中調試/開發的東西,只是讓我看看那個方法調用的結果,你可以刪除它 –

+0

嘿@Tim S!你簡直太棒了!!: ) 有用!經過一定程度的修改:)非常感謝! –

1

既然你不反序列化到「強類型」的對象這個你可以做這樣的事情:

var fmi = JsonConvert.DeserializeObject<Dictionary<string,object>>(str)["fmi"]; 
    var keys = JsonConvert.DeserializeObject<Dictionary<string, object>>(fmi.ToString()); 
+0

你試過嗎?它在行上提供錯誤:resDict [「fmi」]。Keys。錯誤:對象不包含Keys的定義。 :( –

+0

我已經編輯... –

+0

沒有格式化的方式,因爲我需要!但仍然值得+1,並感謝您的時間花費我:) –

相關問題