Создание объекта класса из строки, содержащей свойства класса и их значение

#c# #silverlight-4.0

#c# #silverlight-4.0

Вопрос:

Предположим, у меня есть классный работник :

 Public class Employee
{
  public String ID {get;set;}
  public String Name {get;set;}
  public int Age {get;set;}
}
  

Теперь я сохранил некоторые объекты этого класса в текстовом файле или файле с каким-либо другим расширением, например .abc, используя StreamWriter как

 <Employees>
 <Employee ID="1" Name="ABC" Age="30"/>
 <Employee ID="2" Name="XYZ" Age="35"/>
 <Employee ID="3" Name="PQR" Age="45"/>
</Employees>
  

Проблема, с которой я сталкиваюсь здесь, заключается в том, что при чтении этого файла с помощью StreamReader я получаю строку, и я не могу извлечь объекты класса из этой строки.

Может кто-нибудь, пожалуйста, скажите мне, как я могу создать объект класса Employee из полученной мной строки, чтобы я мог получить список всех объектов Employee, которые хранятся в этой строке.

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

1. Взгляните на (де-) сериализацию MSDN или класс XDocument

2. Текстовый файл кажется допустимым XML-файлом.

3. Допустим, мой файл имеет какой-то другой тип, например расширение .abc.. Затем в этом случае я читаю содержимое этого файла и получаю строку, тогда как я могу извлечь объекты из этой строки ..??

4. Расширение файла не имеет значения. Это зависит от того, как вы создаете этот файл в первую очередь. Как сказал Стефан Бауэр или я, правильный способ сделать это — использовать сериализацию и десериализацию, которые преобразуют объект или список объектов в некоторый формат, который может быть сохранен в файле (например, XML, но может быть JSON или что угодно, но для простоты: хранится как XML) — это называется «сериализация». Затем вам нужно проделать обратный путь — «десериализацию». Вы можете использовать любое окончание файла, которое вам нравится «.xml» — это, конечно, хорошо для XML. Если вы написали этот XML вручную, вам придется проделать больше работы.

Ответ №1:

Вы должны использовать сериализацию — для создания XML:

 XmlSerializer serializer = new XmlSerializer(typeof(Employee));
using(TextWriter writer = new StreamWriter(filename))
{
   var e1 = new Employee();
   serializer.Serialize(writer, po);
}
  

Для чтения XML обратно в объекты:

 FileStream fs = new FileStream(filename, FileMode.Open);
var po = (Employee) serializer.Deserialize(fs);
  

Это код для чтения и записи одним сотрудником. Чтобы прочитать или записать несколько, вы можете прочитать больше, например, здесь http://msdn.microsoft.com/en-us/library/90c86ass (ПРОТИВ 85).aspx