JsonReaderException в parse () - HololensDeploy - PullRequest
0 голосов
/ 24 апреля 2018

Я получаю исключение при развертывании на гололинзе. Я не знаю почему или как это решить. Это происходит в следующем классе.

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;
        }
    }   
}

Он пытается получить данные от удаленного веб-сервиса, который возвращает Json. Программа ожидает завершения вызова, прежде чем продолжить.

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

Кто-нибудь знает, что я делаю неправильно и как я могу решить проблему?

1 Ответ

0 голосов
/ 24 апреля 2018

Я решил свой собственный вопрос.

Проблема для меня заключалась в том, что я не получил никаких данных от моего 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.

Надеюсь, это поможет и кому-то еще.

...