Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как правильно распарсить произвольный объект / 19 сообщений из 19, страница 1 из 1
14.03.2014, 10:43
    #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
14.03.2014, 11:14
    #38586008
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно распарсить произвольный объект
flashslash,
зачем масло масленное
ну если хотите
Код: c#
1.
2.
3.
4.
  public  bool IsSerializable<T>(T obj)
         {
             return typeof (T).IsSerializable;
         }


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

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

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

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

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

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

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

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

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

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

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

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

если речь идёт о типе свойства то в xml-е ты его не получишь, используй рефлексию
...
Рейтинг: 0 / 0
17.03.2014, 11:57
    #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
17.03.2014, 12:53
    #38588075
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно распарсить произвольный объект
flashslashКаким образом мне распарсить ListDate ?
что значит "распарсить" List<DateTime> ?
...
Рейтинг: 0 / 0
17.03.2014, 13:01
    #38588089
flashslash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно распарсить произвольный объект
Изопропил,
это значит - в цикле перебрать все значения ListDate.
Предполагается, что объект на входе произвольный и на месте этого свойства может быть свойство любого типа.
...
Рейтинг: 0 / 0
17.03.2014, 19:52
    #38588687
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно распарсить произвольный объект
flashslash,

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

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


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