繁体   English   中英

反序列化Mixpanel数据API事件JSON C#

[英]Deserialize Mixpanel Data API Event JSON C#

我正在尝试使用Newtonsoft Json从mixpanel数据api反序列化一些json,我创建了一个类,但是遇到错误。 问题在于“值”对象中的属性A和B不是固定名称。 因此,为什么我认为使用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
      }
    }
  }
}

Results.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);
        }
    }

您这里不需要转换器; 像这样使用嵌套词典:

public class Data
{
    [JsonProperty("series")]
    public IEnumerable<DateTime> Series { get; set; }

    [JsonProperty("values")]
    public IDictionary<string, IDictionary<DateTime, int>> Values { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM