这是我的代码,它将Json转换为我自己的类:
JSONArray boats = p["data"]["game"]["start"]["boats"].AsArray;
j.data.game.start.boats = new JsonGameDetailBoat[boats.Count];
for (int i = 0; i < boats.Count; i++) {
JSONNode boat = boats[i];
j.data.game.start.boats[i] = new JsonGameDetailBoat {
name = boat["name"],
total = boat["total"]
};
}
JSONArray board = p["data"]["game"]["board"].AsArray;
j.data.game.board = new JsonGameDataCell[board.Count][];
for (int i = 0; i < board.Count; i++) {
/* almost same code than previous loop */
}
观察最后几行:我必须制作另一个循环,以做同样的事情。
我将不得不再做4次。
所以我试图制作一个将JSONArray转换为自定义类的泛型,并获取字符串的每个属性并从JSON数组中读取它们。
我的代码看起来像这样,但它不起作用,我不知道是否可以枚举类的公共属性。
public class JSONArrayConverter<T>
{
public JSONArrayConverter(JSONNode p)
{
JSONArray tab = p.AsArray;
IList<T> result;
for (int i = 0; i < tab.Count; i++) {
JSONNode value = tab[i];
result[i] = new <T>();
}
}
}
此代码不起作用,我被困在这里:result[i] = new <T>();
答案 0 :(得分:2)
您可以使用反射
public JSONArrayConverter(JSONNode p)
{
JSONArray tab = p.AsArray;
IList<T> result = new List<T>();
for (int i = 0; i < tab.Count(); i++)
{
JSONNode value = tab[i];
result[i] = (T)Activator.CreateInstance(typeof(T), value);
}
}
或界面:
public interface JSONConvertable
{
void Initialise(JSONNode node);
}
public class JSONArrayConverter<T> where T : JSONConvertable, new()
{
public JSONArrayConverter(JSONNode p)
{
JSONArray tab = p.AsArray;
IList<T> result = new List<T>();
for (int i = 0; i < tab.Count(); i++)
{
JSONNode value = tab[i];
result[i] = new T();
result[i].Initialise(value);
}
}
}
编辑:
或回调
public JSONArrayConverter(JSONNode p, Func<JSONNode, T> creator)
{
JSONArray tab = p.AsArray;
IList<T> result = new List<T>();
for (int i = 0; i < tab.Count(); i++)
{
JSONNode value = tab[i];
result[i] = creator(value);
}
}