c# - 格式不太好的json的反序列化

标签 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":{
[...]

我现在想在 Newton 的帮助下从这个 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;
}

感谢您的帮助!

史蒂芬

最佳答案

好的,知道它是如何工作的! 对象树必须是:

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 的字典提示!

关于c# - 格式不太好的json的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24095634/

相关文章:

python - 嵌套的 json 到 csv - 通用方法

c# - 使用此格式转换日期时间字符串 : (yyyy-MM-dd'T'hh:mm:ss-zzz)

c# - 使用更改的默认打印机设置打印 PDF

java - java.io.StringReader.<init> 处的线程 "main"java.lang.NullPointerException 中出现异常(来源未知)

c# - 检查应用程序是否在终端服务而不是远程桌面下运行

java - Jackson ObjectMapper 意外字符 - JSON 有效

c# - 反序列化 JSON 对象与数组

c# - nHibernate 转 Json

c# - 将 DbContext 注入(inject)服务层

c# - 我是否需要在以下 C# 代码中使用锁定?