具有动态结构的类对象

时间:2012-07-16 16:52:11

标签: c# json oop

嗨我试图用C#DataContractJsonSerializer帮助解析一个json对象这就是json的样子

{“user_id”:“121”,“Q1”:“问题1”,“Q2”:“问题2”,“Q3”:“问题3”}

问题数量可以是200-500, 所以我不想制作一个带有500个变量的DataContract来解析这个Json,所以我想是否有一种方法我可以用这样的数字参数调用构造函数或类似的东西,如果有Q1-Q30 in JSON

Objectparse new_object = new Objectparse(30);

哪个会在运行时创建Q1到Q30的变量?并解析Json

1 个答案:

答案 0 :(得分:2)

您可以使用JavaScriptSerializer

var json = @"{""user_id"":""121"",""Q1"":""question 1"",""Q2"":""question 2"",""Q3"":""question 3""}";
var serializer = new JavaScriptSerializer();
dynamic result = serializer.DeserializeObject(json);
Console.WriteLine(result["Q1"]);
Console.WriteLine(result["Q2"]);
...

如果您使用的是旧版本的.NET而不是4.0且无法使用dynamic功能,则可以执行此操作:

var json = @"{""user_id"":""121"",""Q1"":""question 1"",""Q2"":""question 2"",""Q3"":""question 3""}";
var serializer = new JavaScriptSerializer();
var result = (IDictionary<string, object>)serializer.DeserializeObject(json);
Console.WriteLine(result["Q1"]);
Console.WriteLine(result["Q2"]);
...

但我要指出,这是一个非常糟糕的JSON设计。设计这个类的人可能不知道javascript数组:

{
    "user_id": "121",
    "questions": [
        {
            "key": "Q1",
            "value": "question 1"
        },
        {
            "key": "Q2",
            "value": "question 2"
        },
        {
            "key": "Q3",
            "value": "question 3"
        }
    ]
}

现在可以将其序列化为包含问题集合的强类型对象。