解析时的JsonReaderException() - HololensDeploy

时间:2018-04-24 13:41:32

标签: c# unity3d hololens

在hololens上部署时出现异常。我不知道为什么或如何解决它。它发生在下面的课程中。

class JsonConverter
{
    public Dictionary<GameObject, String> convertJsonToObject(String json) {
        Dictionary<GameObject, String> objectList = new Dictionary<GameObject, string>(); 

        //Change JSON String to JSON Object
        JObject jObject = JObject.Parse(json);

        //Open features array in the object
        foreach(JObject pipe in jObject["features"].ToArray())
        {
            //Parse JSON Object to Creator
            PipeLineCreator p = pipe.ToObject<PipeLineCreator>();
            objectList.Add(p.CreatePipes(),p.Type);
        }
        return objectList;
    }    
}

它既无法解析我收到的数据,也无法获取任何数据。对于泡沫,我认为问题将出现在下面的课程中。

class JsonReader
{    
    public String data { get; set; }
    public bool loaded { get; set; }

    public IEnumerator ReadData(String source) {
        using (WWW webClient = new WWW(source))
        {
            loaded = false;
            yield return webClient;
            data =  webClient.text;
            loaded = true;
        }
    }   
}

它尝试从远程Web服务接收数据,该服务返回Json。程序会等到呼叫结束后再继续。

//reader is an instance of JsonReader
StartCoroutine(reader.ReadData(Globals.Globals.DATAURL));
yield return new WaitUntil(() => reader.loaded);

有人知道我做错了什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我解决了自己的问题。

我的问题是我没有从WWW电话中收到任何数据。 显然,WWW类用于接收HTML文件,但没有其他任何东西(或者至少在hololens上)。

相反,我使用了UnityWebRequest类,它允许您通过调用接收字节,如下所示。

public IEnumerator ReadData(String source) {
        using (UnityWebRequest webClient = UnityWebRequest.Get(source))
        {
            loaded = false;
            yield return webClient.SendWebRequest();
            byte[] bytes = webClient.downloadHandler.data;
            data = Encoding.UTF8.GetString(bytes);
            loaded = true;
            if (data == null||data.Equals(""))
            {
                throw new ArgumentNullException("Data", "No Data recieved from service");
            }
        }

    }

要从字节数组中获取Json数据,您只需使用UTF-8编码器对其进行编码。

我希望这也有助于其他人。