我使用简单的Unity应用程序从WebApi发送和接收数据。 Api创建了序列化并作为Json发送的模型。
当我的Unity应用程序收到数据时,它会将Json反序列化为应用程序中存在的类似对象。
但是,JsonUtility.FromJson无法反序列化WWW.text并给我一个错误。
=== API:服务器端===
这是Api用于序列化的模型:
public class MyDataContainer
{
public string Name { get; set; }
public string Action { get; set; }
public int Age { get; set; }
}
这是打包和发送响应的方法:
[AllowAnonymous]
[HttpGet]
[Route("get")]
public string Get()
{
var model = new MyDataContainer()
{
Name = "Testsson",
Action = _testingBackendResponseService.TestRead(),
Age = 999
};
return Newtonsoft.Json.JsonConvert.SerializeObject(model);
}
=== Unity:应用程序=== 这是我的客户端版本的数据模型:
[System.Serializable]
public class MyDataContainer
{
public string Name;
public string Action;
public int Age;
public static MyDataContainer CreateFromJSON(string jsonString)
{
return JsonUtility.FromJson<MyDataContainer>(jsonString);
}
}
这是我单击应用程序的测试按钮时触发的代码:
public void TestButtonClickAction()
{
StartCoroutine(TestGET());
}
private IEnumerator TestGET()
{
Debug.Log("Testing GET...");
Hashtable headers = new Hashtable();
WWW www = new WWW("http://localhost:50320/TestApi/Get");
yield return www;
Debug.Log(www.text);
var myjson = MyDataContainer.CreateFromJSON(www.text);
Debug.Log("THIS IS MY DESERIALIZED OBJECT'S ACTION: " + myjson.Action);
if (www.error != null)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.text);
}
}
=== JSON字符串和错误消息===
调试并查看我的 WWW 对象,我看到Text属性包含以下字符串:
"\"{\\\"Name\\\":\\\"Testsson\\\",\\\"Action\\\":\\\"Ruuuun!\\\",\\\"Age\\\":999}\""
在控制台窗口中查看打印版本,我看到以下字符串:
"{\"Name\":\"Testsson\",\"Action\":\"Ruuuun!\",\"Age\":999}"
当 JsonUtility.FromJson 尝试运行www.text时,我收到以下错误:
ArgumentException:JSON必须表示对象类型。 UnityEngine.JsonUtility.FromJson [MyDataContainer](System.String json) (在 C:/buildslave/unity/build/artifacts/generated/common/modules/JSONSerialize/JsonUtilityBindings.gen.cs:25) ApiGetScript + MyDataContainer.CreateFromJSON(System.String jsonString) (在Assets / ApiGetScript.cs:20) ApiGetScript + c__Iterator0.MoveNext()(at Assets / ApiGetScript.cs:37)UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator枚举器,IntPtr returnValueAddress)(at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
但是该对象不包含我听说JsonUtility可能有困难的集合。当我尝试this solution handling the UTF-8 encoding时,它也不起作用。
感谢您提供的任何帮助!