0

嗨,我正在尝试在 C# DataContractJsonSerializer 的帮助下解析 json 对象,这就是 json 的样子

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

问题的数量可以是 200-500,所以我不想用 500 个变量创建一个 DataContract 来解析这个 Json,所以我在想是否有一种方法可以让我用一个数字调用这个类对象的构造函数或其他东西如果json中有Q1-Q30,则像这样的参数

Objectparse new_object = new Objectparse(30);

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

4

1 回答 1

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"]);
...

如果您使用的是比 4.0 更旧的 .NET 版本并且无法使用该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"
        }
    ]
}

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

于 2012-07-16T16:59:40.610 回答