powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как правильно распарсить произвольный объект
19 сообщений из 19, страница 1 из 1
как правильно распарсить произвольный объект
    #38585966
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет всем!
решаю такую задачку -
есть произвольный объект...надо его отдельные свойства положить в лог.
Пробую сериализовать этот произвольный объект, чтобы потом его распарсить как xml,

Код: c#
1.
2.
3.
4.
5.
6.
public class TestCls
	{
		public DateTime dt1 { get; set; }
		public List<DateTime> ListDate { get; set; }
		public int id { get; set; }
	}



таким образом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	public static bool IsSerializable<T>(T obj)
		{
			Type myType = obj.GetType();
			

			bool myBool = myType.IsSerializable;

			if (obj is ISerializable)
				return true;
			return Attribute.IsDefined(obj.GetType(), typeof(SerializableAttribute));
		}



но собака IsSerializable возвращает False, то есть объект типа не сериализуем...

Вопрос - кто и как решал бы такую задачу и
как правильно распарсить произвольный объект
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586008
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslash,
зачем масло масленное
ну если хотите
Код: c#
1.
2.
3.
4.
  public  bool IsSerializable<T>(T obj)
         {
             return typeof (T).IsSerializable;
         }


есть такой атрибут([Serializable]), на него ведется это свойство IsSerializable
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586016
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

спасибо, но проблема в том, что у прилетевшего на вход объекта может не быть такого атрибута..
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586021
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslash,
если он прилетел откуда то и с делать с ним ничего не возможно, и вам лень писать враппер для него, или свою сериализацию
объект - просто сосет ( выходит так?)
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586035
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объект настолько произвольный, что и Reflection к нему не применимо?
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586039
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

да, но ведь в любом случае можно сериализовать в xml через
XmlSerializer, только для чего сериализовать в каждом случае, если могут попадаться несериализуемые объекты...
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586050
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

послушайте - рефлексия, это дорогостоящая и тяжелая операция...
конечно если иного решения я не найду, то будет рефлексия...но не хотелось бы
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586053
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslashГде-то в степи,

только для чего сериализовать в каждом случае, если могут попадаться несериализуемые объекты...
ну вы то меня зачем об этом спрашивает? я вообще ваши задачи не знаю и что вы творите, у вас летают неопознанные объекты,
вы их пытаетесь сериализовать ( да ладно х.с.) сериализуете, а как вы на той стороне холма их десериализуете?
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586395
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslashпослушайте - рефлексия, это дорогостоящая и тяжелая операция...
А вы тестили? Вам не приходило в голову, что эти траты могут быть вполне допустимыми? Или у вас задача парсить миллион объектов каждую секунду?
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586418
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslashпослушайте - рефлексия, это дорогостоящая и тяжелая операция...

Дык XmlSerializer тоже через рефлексию действует.
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586541
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikflashslashпослушайте - рефлексия, это дорогостоящая и тяжелая операция...

Дык XmlSerializer тоже через рефлексию действует.
И тоже очень тормознуто.
Даже если исползовать бинарную сериализацию (не применительно к этой задаче, а вообще), то ввиду возможного наличия несериализуемых типов придется использовать SurrogateSelector+StreamingContext, для последнего нужна реализация ISerializationSurrogate - её можно получить опять-таки только через рефлекшн.
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38586700
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удивительно, что до сих пор никто не предложил использовать dynamic. Имхо, это будет самый простой способ. Производительность.... да, о ней придётся забыть.

В-общем, ждём топикстартера, пусть уточнит требования.
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38587888
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik, спасибо,

Мои уточнения:

в процессе парсинга объекта мне нужно отфильтровывать свойства заданного типа.
Цель парсинга объекта именно в этом.
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38587932
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslashpetalvik, спасибо,

Мои уточнения:

в процессе парсинга объекта мне нужно отфильтровывать свойства заданного типа.
Цель парсинга объекта именно в этом.

если речь идёт о типе свойства то в xml-е ты его не получишь, используй рефлексию
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38587976
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,

я это уже понял...использую такой код:

тестовый класс:
Код: c#
1.
2.
3.
4.
5.
6.
public class TestCls
	{
		public DateTime dt1 { get; set; }
		public List<DateTime> ListDate { get; set; }
		public int id { get; set; }
	}



код парсинга:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
private static void RefObj22<T>(T obj)
		{
			Type type = obj.GetType();

			var propertyInfoArray = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

			foreach (var propertyInfo in propertyInfoArray)
			{
				var propValue = propertyInfo.GetValue(obj, null);
				if (propValue == null)
					continue;
				if (propValue.GetType().Name == "DateTime")
				{
					bool b0 = false;
					Console.WriteLine(propValue.GetType().Name);
				}
				else
				{
					RefObj22(propertyInfo);
				}
			}
			
		}



Даты он ловит нормально...но в рекурсии
в else{...} натыкаясь на ссылочный тип ListDate получаю баг переполнения стека.

Каким образом мне распарсить ListDate ?

вероятно проблема в использовании не тех флагов в

(BindingFlags.Public | BindingFlags.Instance);
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38588075
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslashКаким образом мне распарсить ListDate ?
что значит "распарсить" List<DateTime> ?
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38588089
Фотография flashslash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
это значит - в цикле перебрать все значения ListDate.
Предполагается, что объект на входе произвольный и на месте этого свойства может быть свойство любого типа.
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38588687
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flashslash,

RefObj22(propertyInfo); - это не понятно, нагуя PropertyInfo подвергаешь рефлексии?

Зы. такое ощущение что у тебя в голове каша, попробуй формально сформулировать поставленную задачу
...
Рейтинг: 0 / 0
как правильно распарсить произвольный объект
    #38588781
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationформально сформулировать
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как правильно распарсить произвольный объект
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]