【问题标题】:Deserialize JSON response with unknown object names using c# ReadObject()使用 c#ReadObject() 反序列化具有未知对象名称的 JSON 响应
【发布时间】:2017-03-21 16:22:46
【问题描述】:

所以我正在尝试使用以下代码将 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# 中处理这个问题?有人可以提供我的类的外观示例吗?

在我的一生中,我无法将这些数据放入我的对象类中!

【问题讨论】:

    标签: c# json


    【解决方案1】:

    您可以按照本文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 响应。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多