如何在运行时设置动态表达式名称(JSON Parser)

时间:2012-08-01 11:06:43

标签: c# json dynamic javascriptserializer

我正在构建一个JSON文件解析器。我目前使用JavaScriptSerializer类将JSON文件读入一个看起来像

的DynamicJsonObject
dynamic glossaryEntry

然后我可以用以下方式检索顶级json节点。用于检索名为Scoring的名为

的JSON组
{
    "Scoring":
    [
        {
            "blah": "blah",
            "blah": "blah"      
        },
        {
            "blah": "blah",
            "blah": "blah"      
        }   
    ]
}

我使用动态表达式:

return glossaryEntry.Scoring;

或者例如我使用

return glossaryEntry.quests;

对于看起来像这样的JSON:

{
    "quests":
    [
        ... 
    ]
}

这是非常硬编码的,并且要求我事先知道可以解析的所有可能的标识符。我认为必须有一种方法让动态表达式评估为某种东西,以便glossaryEntry。“this”部分可以在运行时确定吗?

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以将json字符串反序列化为Dictionary<string,object>

var glossaryEntry = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);
var keys = glossaryEntry.Keys.ToList();

var scoring1 = glossaryEntry["Scoring"];
//OR
var scoring2 = glossaryEntry[keys[0]];