Pass class as a parameter to method

大兔子大兔子 提交于 2019-12-12 03:23:05

问题


I'm having trouble finishing this method. How can I pass class as parameter and return the same class? This is the scenario I've met

Class A
{
...
}

Class C
{
 ....
}

Class B
{
  A a = getJSONClass(String jsonString, classA?);
  C c = getJSONClass(String jsonString, classC?);

  public (class?) getJSONClass(String jsonString, class?)
  {
   MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
   DataContractJsonSerializer ser = new DataContractJsonSerializer(class?.type);
   return ser.ReadObject(memoryStream) as class?;
  }

}

Any help??


回答1:


Well syntactically you'd use generics:

public T getJSONClass<T>(String jsonString) where T : class
{
   MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
   DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
   return ser.ReadObject(memoryStream) as T;
}

usage:

A a = getJSONClass<A>(String jsonString);
C c = getJSONClass<C>(String jsonString);



回答2:


Use generics:

    public T GetDeserializedObject<T>(string jsonString) where T: class
    {
        var serializer = new DataContractJsonSerializer(typeof(T));

        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
        {
            return serializer.ReadObject(stream) as T;
        }
    }



回答3:


Can't you do something like:

Class A
{
...
}

Class C
{
 ....
}

Class B
{
  A a = (A)getJSONClass(String jsonString, typeof(A));
  C c = (C)getJSONClass(String jsonString, typeof(C));

  public object getJSONClass(String jsonString, Type type)
  {
   MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
   DataContractJsonSerializer ser = new DataContractJsonSerializer(type);
   return ser.ReadObject(memoryStream);
  }
}


来源:https://stackoverflow.com/questions/27406715/pass-class-as-a-parameter-to-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!