使用c#ReadObject()反序列化具有未知对象名称的JSON响应

时间:2017-03-21 16:22:47

标签: c# json

所以我试图使用以下代码隐式地将JSON响应反序列化回对象实例。

 DataContractJsonSerializer jsonSerialiser = new DataContractJsonSerializer(responseType);
 responseBase = jsonSerialiser.ReadObject(responseStream);

如果以字符串形式传出的响应如下

{
"20170317112739": {
    "start": {
        "SQ": 4577,
        "TS": "2017-03-17T11:26:59",
        "FisCode": "_R1-AT1_001/1_SQ4577_2017-03-17T11:26:59_0,00_0,00_0,00_0,00_0,00_vr1zl86Y_49e862eb_rNvvLM3FKh4=_DGZt+z+A3fY8zLlt2E55R8zCD/wf7yw9q/VivAiaNtxNpaTkhlTONAsD6yc+8Vcxwnm/lBalIwEI6GswC04kqg=="
    },
    "close": {
        "SQ": 4667,
        "TS": "2017-03-17T11:27:39",
        "FisCode": "_R1-AT1_001/1_SQ4667_2017-03-17T11:27:16_0,00_0,00_0,00_0,00_0,00_r/82sV+w_49e862eb_FD/gDnivnes=_LKmvkk5OEoL7EFIebQU73VDVfPGzRGOyKNLlIW1mJkvPpqS0oVdWmqiNGR0cnpT35ArF++XzO1D/q7keTJe4cA=="
    }
},

"current": {
    "start": {
        "SQ": 4670,
        "TS": "2017-03-17T11:27:39",
        "FisCode": "_R1-AT1_0/1_SQ4670_2017-03-17T11:27:39_0,00_0,00_0,00_0,00_0,00_/agx6rsw_49e862eb_qTh1/lCawvo=_f7yNP/+WUWZCojerZ9fe/wID1gll0I37swEKsauV8h7g8gSCFZ2Ykg45JjkO7BrChCBkl0ewohuGdbP4haLbrQ=="
    },
    "2017-03": {
        "SQ": 4673,
        "TS": "2017-03-17T11:27:39",
        "FisCode": "_R1-AT1_0/1_SQ4670_2017-03-17T11:27:39_0,00_0,00_0,00_0,00_0,00_/agx6rsw_49e862eb_qTh1/lCawvo=_f7yNP/+WUWZCojerZ9fe/wID1gll0I37swEKsauV8h7g8gSCFZ2Ykg45JjkO7BrChCBkl0ewohuGdbP4haLbrQ=="
    }
},
"lic": "0SvXs"

}

来自JSON服务的简单响应没有问题我可以使用[DataContract]和[DataMember]简单地装饰它们。

此特定服务响应的问题是,“2017-03”等项目名称将根据在其他月份/年内进行呼叫的时间而发生变化。

我如何在C#中处理这个?,有人可以举例说明我的课程应该如何看待吗?

对于我的生活,我无法将这些数据存入我的对象类中!

1 个答案:

答案 0 :(得分:0)

您可以按照此帖Deserialize JSON into C# dynamic object?

中的建议制作动态词典

或者你可以在System.Web.Helpers

的帮助下实现这样的功能
using (StreamReader r = new StreamReader("sample.json"))
{
    string json = r.ReadToEnd();
    dynamic data = Json.Decode(json); 
    Console.WriteLine(data["20170317112739"].start.sq);
}

这里sample.json包含您的示例JSON响应。