在我被标记为重复之前,我让Dynamic json object with numerical keys的代码现在工作得很好。我的数字键的问题是,遗憾的是,我得到的JSON字符串最初是以年份分隔的,所以我会使用反射来尝试在动态对象上创建动态属性,如果是这样,怎么办?我知道动态对象我不能拥有obj [“2010”]或obj [0]。在JavaScript中,这没有问题,只是试图让它在C#中运行。想法? 返回JSON的示例:
{
"2010": [
{
"type": "vacation",
"alloc": "90.00"
},
或者,有时候年份是第二个元素: 我无法控制这个json。
{
"year": [],
"2010": [
{
"type": "vacation",
"alloc": "0.00"
},
答案 0 :(得分:5)
也许我误解了你的问题,但这就是我的方法:
static void Main(string[] args) {
var json = @"
{
'2010': [
{
'type': 'vacation',
'alloc': '90.00'
},
{
'type': 'something',
'alloc': '80.00'
}
]}";
var jss = new JavaScriptSerializer();
var obj = jss.Deserialize<dynamic>(json);
Console.WriteLine(obj["2010"][0]["type"]);
Console.Read();
}
这有帮助吗?
我写了一篇关于使用.NET序列化/反序列化JSON的博文:Quick JSON Serialization/Deserialization in C#
答案 1 :(得分:1)
我已经投了这个问题和JP的答案,我很高兴我在互联网上找到了这个。
我已经包含了一个单独的答案来简化我的用例以便其他人受益。它的关键是:
dynamic myObj = JObject.Parse("<....json....>");
// The following sets give the same result
// Names (off the root)
string countryName = myObj.CountryName;
// Gives the same as
string countryName = myObj["CountryName"];
// Nested (Country capital cities off the root)
string capitalName = myObj.Capital.Name;
// Gives the same as
string capitalName = myObj["Capital"]["Name"];
// Gives the same as
string capitalName = myObj.Capital["Name"];
现在这一切似乎很明显,但我只是没想到它。
再次感谢。