我的JSON的一部分如下所示:
就像您在JSON中看到的那样,温度“字典”实际上是2个元素的列表。
第一个元素是时间戳记,第二个元素是温度。不知道为什么服务提供者这样做了,但是我真的没有选择,我必须这样做。
但是在我的C#对象中,我希望将此作为字典,以时间戳为键,以温度为值。
这可能吗?
//note, I've a custom converter that converts from long to DateTime
public Dictionary<DateTime, double> Temperature { get; set; }
并反序列化如下:
JsonConvert.DeserializeObject<List<WeatherPredictionDay>>(content, new EpochConverter());
答案 0 :(得分:0)
是的,这可以通过这样的自定义JsonConverter
完成:
class TemperatureArrayConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(Dictionary<DateTime, double>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray ja = JArray.Load(reader);
var dict = new Dictionary<DateTime, double>();
foreach (JArray item in ja)
{
var key = item[0].ToObject<DateTime>(serializer);
var val = item[1].ToObject<double>(serializer);
dict.Add(key, val);
}
return dict;
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
要使用它,只需将Temperature
属性标记为[JsonConverter]
属性,如下所示:
[JsonConverter(typeof(TemperatureArrayConverter))]
public Dictionary<DateTime, double> Temperature { get; set; }
注意:以上编写的转换器旨在与您现有的EpochConverter
配合使用,以将字典键的时间戳值转换为DateTimes
。
这是一个有效的演示:https://dotnetfiddle.net/TdxYjj