在 JsonUtility.FromJson<>() 中传递一个字符串而不是类型



所以我一直在学习如何制作异步多人游戏,很酷的东西。

为了让我的代码看起来更好,我希望能够将类名作为字符串传递,这将使我的代码更易于阅读,因为我可以使用这个函数来处理我的请求:

public IEnumerator DoWebRequest(string url, string jsonData, string classToPass)
{
WWWForm _form = new WWWForm();
_form.AddField("json", jsonData);
using (UnityWebRequest _webRequest = UnityWebRequest.Post(url, _form))
{
yield return _webRequest.SendWebRequest();
var _response = JsonUtility.FromJson<StringHerePls> (_webRequest.downloadHandler.text);
//Debug.Log("LocationX: " + _response.locationX + " LocationY: " + _response.locationY + " LocationZ: " + _response.locationZ);
}
}

我尝试过使用:

  • System.Type.GetType(classToPass(
  • System.Type.GetType(classToPass(.MakeGenericType(classToPass(
  • 上面的变体包括将其作为局部变量并使用该变量

使用上述System.Type.GetType(classToPass(时出现的错误:

  • 运算符'<'不能应用于"method group"one_answers"type"类型的操作数

为了测试这种转换是否有效,我尝试使用:

var _response = JsonUtility.FromJson< System.Type.GetType(classToPass) > (_webRequest.downloadHandler.text);

为了获得对脚本的引用,这个做了的工作。

所以我不知道如何让它发挥作用,我只是不明白为什么GetComponent有效,而FromJason无效。

您可以使用JsonUtility.FromJson(string, Type)重载并使用反射来查找名称与classToPass匹配的类型。

类似这样的东西:

Type type = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic).SelectMany(a => a.GetExportedTypes()).First(t => t.Name == classToPass);
var response = JsonUtility.FromJson(_webRequest.downloadHandler.text, type);

最新更新