2016-05-23 2 views
0

Я работаю над приложением iOS в Unity, и у меня проблема. Для хранения данных я использую JSON, а в Unity я использую Newtonsoft.Json (я загружаю файлы DLL с официального сайта и добавляю в версию проекта Unity для .Net 2.0).JSON не работает в приложении iOS Unity 5

Когда я запускаю сцену в Unity на Mac, все работает нормально, но когда я создаю проект для iPhone и запускаю сцену на iPhone XCode выводят этот журнал (и элементы не добавляют к Dropdown).

В сцене из json-файла я получаю список моих элементов и добавляю в раскрывающееся меню.

public Dropdown anions; 
public Dropdown cations; 

StreamReader reader; 
string json; 
SolubilityTable solubility; 

public void Start() { //When I start Scene 
    reader = new StreamReader (Application.dataPath + "/Data/solubilityTable.json"); 
    json = reader.ReadToEnd(); 
    solubility = JsonConvert.DeserializeObject<SolubilityTable>(json); 

    anions.AddOptions (solubility.anions); 
    cations.AddOptions (solubility.cations); 
} 

Вход:

MissingMethodException: Method not found: 'Default constructor not  found...ctor() of System.ComponentModel.TypeConverter'. 
    at System.Activator.CreateInstance (System.Type type, Boolean  nonPublic) [0x00000] in <filename unknown>:0 
    at System.Activator.CreateInstance (System.Type type) [0x00000] in  <filename unknown>:0 
    at System.ComponentModel.TypeDescriptor.GetConverter (System.Type  type) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Serialization.JsonTypeReflector.GetTypeConverter  (System.Type type) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Utilities.ConvertUtils.GetConverter (System.Type  t) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Serialization.DefaultContractResolver.CanConvertToString  (System.Type type) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract (System.Type objectType) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract (System.Type type) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe (System.Type type) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, Boolean checkAdditionalContent) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.JsonConvert.DeserializeObject (System.String value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in <filename unknown>:0 
    at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value) [0x00000] in <filename unknown>:0 
    at Solubility.Start() [0x00000] in <filename unknown>:0 

(Filename: currently not available on il2cpp Line: -1) 
+0

Как выглядит Json? Можете ли вы вставить Json-файл, полученный здесь? – Programmer

+0

@Programmer https://github.com/diniska/chemistry/blob/master/PeriodicalTable/periodicTable.json –

ответ

0

Используйте Unity Джейсон API JsonUtility.FromJson.

[System.Serializable] 
public class Element 
{ 
    public string group; 
    public int position; 
    public string name; 
    public object number; 
    public string small; 
    public double molar; 
    public int[] electrons; 
} 

[System.Serializable] 
public class Table 
{ 
    public string wiki; 
    public Element[] elements; 
} 

[System.Serializable] 
public class Lanthanoid 
{ 
    public string group; 
    public int position; 
    public string name; 
    public int number; 
    public string small; 
    public double molar; 
    public int[] electrons; 
} 

[System.Serializable] 
public class Actinoid 
{ 
    public string group; 
    public int position; 
    public string name; 
    public int number; 
    public string small; 
    public double molar; 
    public int[] electrons; 
} 

[System.Serializable] 
public class SolubilityTable 
{ 
    public Table[] table; 
    public Lanthanoid[] lanthanoids; 
    public Actinoid[] actinoids; 
} 

System.IO.StreamReader reader; 
string json; 
SolubilityTable solubility; 

void Start() 
{ 
    solubility = new SolubilityTable(); 
    reader = new System.IO.StreamReader(Application.dataPath + "/Data/solubilityTable.json"); 
    json = reader.ReadToEnd(); 
    solubility = JsonUtility.FromJson<SolubilityTable>(json); 


    //Show all wiki from Table 
    for (int i = 0; i < solubility.table.Length; i++) 
    { 
     Debug.Log("Got: " + solubility.table[i].wiki); 
    } 
} 

Полезное Примечание:

Также рекомендуется использовать эту site для создания класса от Json, когда у вас есть такие проблемы, как это. Когда все будет готово, просто измените все Lists на arrays и удалите автоматическую недвижимость { get; set; } со всех переменных. Затем будет создан Json Serializer от Unity. Протестировано с 5.40.B13, и я рекомендую вам обновить эту версию, если у вас возникли проблемы.

+0

Спасибо! Это нормально. Я не изменяю List to array. –

+0

@IvanIstomin Добро пожаловать. Когда я сказал изменить список на массив, я имел в виду, что вы должны сделать это, когда используете веб-сайт, который я вставляю в ответ, чтобы создать класс для вашего Json. На данный момент вам это не нужно, потому что я уже сделал это для вас. – Programmer

Смежные вопросы