System.Reflection и сериализация свойств
Вопрос вообще из Юнити, но больше из класического .net
Как мне правильно собрать все помеченные атрибутом свойства и поля в классе (компоненте go) с последующей их сериализацией/десериализацией в Json? Это нужно для того. что бы написать кастомный редактор для объектов разного типа (аналог инспектора Юнити, ток в приложении ), по этому писать универсальный класс с параметрами не вариант. Если есть более удобный способ, кроме рефлексии (а его нет), то я только за. Часть тз: Цитата:
http://pastebin.com/TqhKiqTG PAX, хотя ты и делся куда-то, но нужна твоя помощь. Прошу не игнорировать, ибо задачу нужно как-то решить и поскорее. |
Ответ: System.Reflection и сериализация свойств
Как с MemberInfo получить тип?
А то если Код:
MemberInfo.ToString() пример: Код:
float t ; - > System.Sungle t Код:
MemberInfo.GetType() Цитата:
Нужно как в первом варианте, что бы нормально сериализовать. |
Ответ: System.Reflection и сериализация свойств
MemberInfo это информация о члене класса (как и следует из названия).
А член класса это: - поле - свойство - метод - конструктор - событие - вложенный тип (вложенный класс, структура, перечисление) - что-то еще что я забыл Так как MemberInfo это класс для всех выше перечисленных членов класса, то что ты хочешь получить от него? Какой-то "тип"? Но у конструктора нету типа. Поэтому и у класса MemberInfo нет возможности "получить тип". Однако если у тебя задача сериализовать все поля и свойства, ты можешь у MemberInfo взять свойство MemberType (то есть проверить что текущий член класса это либо поле либо свойство). MemberTypes это перечисление. И дальше проверить - если MemberTypes.Property, то сделать var propertyInfo = (PropertyInfo) memberInfo; а вот уже у PropertyInfo есть информация о типе свойства propertyInfo.PropertyType аналогично var fieldInfo = (FieldInfo) memberInfo; https://dotnetfiddle.net/z1IMim А вообще странно как ты получил MemberInfo. В рефлексии есть удобные методы GetProperties() (возвращает PropertyInfo[]) и GetFields() (возвращает FieldInfo[]). Воспользовался бы ими - вообще проблемы не возникло бы. |
Ответ: System.Reflection и сериализация свойств
Цитата:
А так получается 1 проход. Так и сделал.Проверял что за член и кастовал к нему. И еще нельзя сериализировать object предварительно не приведя его к однозначному типу (. Не канает даже; Код:
o = (float) o; А так хотелось динамическую типизацию. Просто у меня структура: Код:
public Component instance; Кароче, я что-то кастомный сериализатор написал... |
Ответ: System.Reflection и сериализация свойств
А чем ты сериализуешь то ? newtonsoft json.net ?
Какие-то очень странные у тебя проблемы |
Ответ: System.Reflection и сериализация свойств
Цитата:
https://docs.unity3d.com/ScriptRefer...onUtility.html Вот он упорно не сериализует не приведеные типы Но только он умеет адекватно сериализовать объекты из UnityEngine |
Часовой пояс GMT +4, время: 23:45. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot