使用WWW的Unity3D无法从Api响应中反序列化JSON

时间:2017-12-09 13:34:17

标签: c# json unity3d asp.net-web-api unity5

我使用简单的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时,它也不起作用。

感谢您提供的任何帮助!

0 个答案:

没有答案