這裏有一個簡單的類我拼湊從各種職位....它已被測試約15分鐘,但似乎爲我的目的工作。它使用JavascriptSerializer
來完成這項工作,可以使用詳細信息in this post在您的應用中引用該工作。
下面的代碼可以在LinqPad運行通過測試一下:
- 右鍵點擊LinqPad腳本選項卡上,選擇「查詢 屬性」
- 引用的「System.Web程序。 「其他參考」中的「Extensions.dll」
- 添加 「System.Web.Script.Serialization」的「其他名稱空間導入」。
希望它有幫助!
void Main()
{
string json = @"
{
'glossary':
{
'title': 'example glossary',
'GlossDiv':
{
'title': 'S',
'GlossList':
{
'GlossEntry':
{
'ID': 'SGML',
'ItemNumber': 2,
'SortAs': 'SGML',
'GlossTerm': 'Standard Generalized Markup Language',
'Acronym': 'SGML',
'Abbrev': 'ISO 8879:1986',
'GlossDef':
{
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
},
'GlossSee': 'markup'
}
}
}
}
}
";
var d = new JsonDeserializer(json);
d.GetString("glossary.title").Dump();
d.GetString("glossary.GlossDiv.title").Dump();
d.GetString("glossary.GlossDiv.GlossList.GlossEntry.ID").Dump();
d.GetInt("glossary.GlossDiv.GlossList.GlossEntry.ItemNumber").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso").Dump();
d.GetObject("Some Path That Doesnt Exist.Or.Another").Dump();
}
// Define other methods and classes here
public class JsonDeserializer
{
private IDictionary<string, object> jsonData { get; set; }
public JsonDeserializer(string json)
{
var json_serializer = new JavaScriptSerializer();
jsonData = (IDictionary<string, object>)json_serializer.DeserializeObject(json);
}
public string GetString(string path)
{
return (string) GetObject(path);
}
public int? GetInt(string path)
{
int? result = null;
object o = GetObject(path);
if (o == null)
{
return result;
}
if (o is string)
{
result = Int32.Parse((string)o);
}
else
{
result = (Int32) o;
}
return result;
}
public object GetObject(string path)
{
object result = null;
var curr = jsonData;
var paths = path.Split('.');
var pathCount = paths.Count();
try
{
for (int i = 0; i < pathCount; i++)
{
var key = paths[i];
if (i == (pathCount - 1))
{
result = curr[key];
}
else
{
curr = (IDictionary<string, object>)curr[key];
}
}
}
catch
{
// Probably means an invalid path (ie object doesn't exist)
}
return result;
}
}
@格雷格:其實,我建議'在MS的JavaScriptSerializer'版本,因爲它不會接受除WCF的自定義JSON格式外的其他任何東西(例如,日期字段看起來像日期但未包含在DATE()中)失敗慘重 – 2011-01-06 01:50:03
此外,請看[使用.NET中的JavascriptSerializer解析JSON對象](http:// www .tomasvera.com /編程/ using-javascriptserializer-to-parse-json-objects /)文章,這實際上是一個很好的教程。 – scatmoi 2012-10-23 17:50:18
你在哪裏獲得JavaScriptSerializer?它在我的C#.NET 3.5項目中無法識別。 – 2013-10-15 20:47:00