Я пробовал сериализацию и десериализацию JSON в Unity, используя JsonUtility и Newtonsoft.Json. Но ни один из них не работает так, как ожидалось.
Проблема с JsonUtility заключается в том, что он дает пустую строку при преобразовании объекта в JSON. При преобразовании строки JSON в объект пользовательского класса и печати класса object.value печатается пустая строка. Ирония в том, что он не выдает никакой ошибки.
Проблема с Newtonsoft.Json заключается в том, что он не работает со сборками Android и iOS и сборками, использующими IL2CPP.
Код С#
public class AddUsers : MonoBehaviour
{
public void ConvertToJSONSample()
{
UserDetails userDetails1 = new UserDetails()
{
Id = "0001",
Name = "John"
};
string JsonString = JsonUtility.ToJson(userDetails1);
print(JsonString); ;
UserDetails userDetails2 = JsonUtility.FromJson<UserDetails>(JsonString);
print("User's Name is: " + userDetails2.Name);
}
}
[Serializable]
public class UserDetails
{
public string Id { get; set; }
public string Name { get; set; }
}
Выход
Смотрите Сериализация скрипта
@JunedKhanMomin Почему не обязательно предоставлять отзыв о минусах, и почему идеи, предполагающие такое, воспринимаются негативно?





Спасибо @dbc за разъяснения. JsonUtility вероятно, сериализует поля, а не свойства. В случае вопроса добавление { get; set; } делает его свойством. Использование свойств позволяет добавлять в код дополнительные функции. Однако, чтобы код работал с JsonUtility, удалите get; и set; из кода. Но вы получите очень ограниченную функциональность, используя встроенный в Unity JsonUtility. Но у него есть ограничения. Это не будет работать с расширенным использованием. Для этого используйте форк JamesNK/Newtonsoft.Json, упомянутый ниже, он работает со сборками Unity IL2CPP на Android, iOS и других.
Другой способ — использовать форк JamesNK/Newtonsoft.Json из Json-for-Unity. Страница GitHub содержит подробное объяснение того, как использовать, как установить, его функции и т. д. Он работает с мобильными сборками, такими как Android и iOS, и другими сборками IL2CPP. Пакет имеет открытый исходный код и поддерживается разработчиком, в отличие от плагина JSON.Net, который не обновляется с 2016 года.
Обратите внимание, что использование JSON.Net является вариантом, но он не обновляется с 2016 года, поэтому могут возникнуть проблемы в последних или будущих версиях Unity.
Я считаю, что
JsonUtilityсериализует поля, а не свойства. См. Сериализация и десериализация Json и Json Array в Unity , в частности 4. УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ JsonUtility: удаление свойства из класса. и например Использование JsonUtility.FromJson для десериализации JSON в Unity. Таким образом, вам понадобитсяpublic string Id;безgetиset, чтобы использоватьJsonUtility.