反序列化不太好的格式化json

时间:2014-06-07 09:06:36

标签: c# json json.net deserialization json-deserialization

我需要一些奇怪的json反序列化的帮助或一些灵感。

这是我从服务中收到的json(无法更改它,它的外部服务):

{
   "status":"OK",
   "statuscode":200,
   "payload":{
      "solarforecast":{
         "5876":{
            "2014-06-06 23:00:00":{
               "bh":0,
               "dh":0               
            },
            "2014-06-07 00:00:00":{
               "bh":0,
               "dh":0
            },
            [...]
      }
   }
}

我打电话来获取ID为 5876 的对象的值。 因此,如果我调用了id 1254 的对象,json会改变这种方式:

[...]
 "solarforecast":{
    "1254":{
       "2014-06-06 23:00:00":{
[...]

我现在想在牛顿的帮助下从这个json代码创建一个c#对象;)。 我的首要问题是,对于任何对象调用及其数字,属性名称(对象id)都是不同的。 我的第二个问题是未完成计数的子对象。我认为在一个结构良好的json对象中,它必须像这样思考(参见" ["括号):

      "solarforecast":{
         "5876":[
            "2014-06-06 23:00:00":{
               "bh":0,
               "dh":0               
            },
            "2014-06-07 00:00:00":{
               "bh":0,
               "dh":0
            },
            [...]
          ]
      }

有没有人如何将这个json反序列化为适当的c#类? 我试着想到这样的结果:

public class Payload
{
    [JsonProperty("solarforecast")]
    public SolarForecast SolarForecast;
}

public class SolarForecast
{
    [JsonProperty("???")]
    public IEnumerable<SolarForecastTimeSet> SomeObjectID;
}

public class SolarForecastTimeSet
{
    [JsonProperty("???")]
    public decimal TimeStamp;

    [JsonProperty("dh")]
    public decimal DiffusRadiationHorizontal;

    [JsonProperty("bh")]
    public decimal DirectRadiationHorizontal;
}

感谢您的帮助!!

斯特芬

1 个答案:

答案 0 :(得分:1)

好的,弄清楚它是如何运作的! 对象树必须是:

public class Payload
{
    [JsonProperty("solarforecast")]
    public Dictionary<int, Dictionary<DateTime, SolarForecastTimeSet>> SolarForecast;
}

public class SolarForecastTimeSet
{
    [JsonProperty("dh")]
    public decimal DiffusRadiationHorizontal;

    [JsonProperty("bh")]
    public decimal DirectRadiationHorizontal;
}

感谢 @andyp 提供他的字典提示!