#c# #json.net #mixpanel
#c# #json.net #mixpanel
Вопрос:
Я пытаюсь десериализовать некоторый json из API данных mixpanel с помощью Newtonsoft Json, я создал класс, но получаю ошибки. Проблема заключается в том, что свойства A и B в объекте ‘values’ не являются фиксированными именами. Следовательно, я думал, что использование Dictionary<string, NameValueCollection>
сработает. Любая помощь в этом была бы отличной
JSON:
{
"legend_size": 1,
"data": {
"series": [
"2014-06-30"
],
"values": {
"A": {
"2014-06-30": 1082,
"2014-06-23": 4249
},
"B": {
"2014-06-30": 1082,
"2014-06-23": 4249
}
}
}
}
Результаты.cs
public class Result
{
[JsonProperty("data")]
public Data Data { get; set; }
[JsonProperty("legend_size")]
public int LegendSize { get; set; }
}
public class Data
{
[JsonProperty("series")]
public IEnumerable<DateTime> Series { get; set; }
[JsonConverter(typeof(MixEventValuesConverter))]
[JsonProperty("values")]
public IDictionary<string, NameValueCollection> Values { get; set; }
}
Я создал конвертер (впервые в истории, я действительно не знаю, что я с ним делаю!) и попытался вернуть только пустое значение на данный момент, но я получаю сообщение об ошибке «Дополнительный текст, найденный в строке JSON после завершения десериализации объекта»..
MixEventValuesConverter.cs
public class MixEventValuesConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var col = new NameValueCollection();
col.Add("testtest", "vallll");
var dic = new Dictionary<string, NameValueCollection>();
dic.Add("testt", col);
return dic;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(MixEventResult);
}
}
Ответ №1:
Здесь вам не нужен конвертер; просто используйте вложенный словарь, подобный этому:
public class Data
{
[JsonProperty("series")]
public IEnumerable<DateTime> Series { get; set; }
[JsonProperty("values")]
public IDictionary<string, IDictionary<DateTime, int>> Values { get; set; }
}
Комментарии:
1. Сработало в первый раз, спасибо нагрузкам, дам, он работал над этим целую вечность!
2. Нет проблем; рад, что смог помочь.