EntityObject в XML и обратно в Object? (через DataTable, если возможно)

#c# #entity-framework #datatable

#c# #entity-framework #datatable

Вопрос:

ПРАВКА 2

Я снова обновляю вопрос, чтобы более просто объяснить, что мне нужно.
Мне нужно взять любой EntityObject в моем приложении, преобразовать его в XML, который позже может быть повторно преобразован обратно в объект, к которому можно запросить или использовать в источнике данных. Я не могу повторно преобразовать в исходный EntityObject, потому что структура этого объекта могла измениться. Выполнимо ли это?

Оригинальный вопрос ниже

Давайте предположим на секунду, что кто-то выше меня (потому что я такой и есть) требует, чтобы я взял EntityObject и преобразовал его в DataTable. Пример, который мне прислали о том, как это сделать, датирован 2006 годом и использует пользовательский класс (который, по мнению моего босса, был встроен в .Net), и он все равно не работает.

Есть ли способ сделать это без написания моего собственного пользовательского класса? Что-то такое простое, как «new DataTable(myEntityObject)» было бы потрясающе. Я предполагаю, что нет.

Редактировать
Я изменил вопрос, потому что мне неверно указали критерии. В основном мы хотим, чтобы наш EntityObject был XML, чтобы его можно было сохранить в базе данных и реконструировать позже. Можно ли это сделать с помощью сериализации?

Комментарии:

1. Вы хотите создать DataTable из одного объекта? Одна строка в таблице?

2. Да. Пожалуйста, просто не спрашивайте почему.

3. Я не думаю, что в фреймворке есть такая функция

4. Можете ли вы привести какой-нибудь пример? DataTable — это таблица, где еще EntityObject — это одна строка, как и чего вы хотите достичь, немного неясно.

5. Почему вы хотите сохранить entity в формате XML? Вы можете просто сохранить его с помощью EF.

Ответ №1:

Чтобы ответить на ваш обновленный вопрос: используйте XmlSerializer

 public XElement XmlSerialize(object o)
        {
            XmlSerializer serializer = new XmlSerializer(o.GetType());
            using (StringWriter sw = new StringWriter())
            {
                serializer.Serialize(sw, o);
                return XElement.Parse(sw.ToString());
            }
        }
  

Комментарии:

1. Как только я это сделаю, могу ли я перестроить эти данные в DataTable? Причина, по которой я не буду возвращаться к EntityObject, заключается в том, что он мог измениться с момента сериализации.

2. Вам пришлось бы самостоятельно анализировать XML в DataTable

Ответ №2:

Нет, такого встроенного метода / класса нет. Вы должны написать свое собственное преобразование.

Ответ №3:

Для этого нужно написать класс конвертера, что-то вроде этого:

 public DataRow ToDataRow<T>(T entity)
public DataTable ToDataTable<T>(IEnumerable<T> entities)