反序列化通用对象类型

时间:2018-03-05 19:29:53

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

我正在尝试从json反序列化对象。问题是对象的类型是通用的,所以我这样做:

public class MyConverter<T> : JsonConverter
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.StartObject) 
        {
            JObject jObject = JObject.Load(reader);

            if (jObject["content"] != null)
            {
                foreach (JObject t in jObject["content"])
                {
                  List<JProperty> jPropList = t.Properties()
                      .Where(attr => attr.Name.Equals("date") || attr.Name.Equals("hour"))
                      ToList();

                  if (jPropList != null)
                  {
                      for (int i = jPropList.Count - 1; i >= 0; i--)
                      {
                          if (jPropList.ElementAt(i).Name.ToString().Equals("date"))
                          {
                              dt = DateTime.Parse(jPropList.ElementAt(i).Value.ToString());
                          }
                          else if (jPropList.ElementAt(i).Name.ToString().Equals("hour"))
                          {
                              string[] horario = jPropList.ElementAt(i).Value.ToString().Split(':');

                              dt = dt.AddHours(Convert.ToUInt16(horario[0]));
                              dt = dt.AddMinutes(Convert.ToUInt16(horario[1]));
                              dt = dt.AddSeconds(Convert.ToUInt16(horario[2]));
                          }
                      }

                      t.Property("date").Remove();
                      t.Property("hour").Remove();
                    }

                    T obj = serializer.Deserialize <objectType.GenericTypeArguments[0]> (t.CreateReader());
                }
            }
        }
    }
}

但该行

T obj = serializer.Deserialize < objectType.GenericTypeArguments[0] > (t.CreateReader());

给我编译错误消息:

  

“运营商”&lt;'不能应用于'方法组'类型的操作数   '类型'”。

我知道

objectType.GenericTypeArguments[0]

返回一个类型,它就是我需要的类型,我可以实例化到我所拥有的类之一。

如何获取用于反序列化的通用对象的类型?我怎样才能做到这一点?

0 个答案:

没有答案