Как XML десериализовать объект неизвестного типа? - PullRequest
1 голос
/ 13 октября 2009

Я хочу сохранить свой объект на жестком диске (например, в кэше) с помощью XmlSerializer. В этом случае у меня нет никаких проблем.

Однако, когда я хочу десериализовать этот XML в объект, я получаю ошибку. Там в любом случае десериализовать XML для неизвестного объекта или объекта, который я создал?

Ответы [ 4 ]

1 голос
/ 13 октября 2009

В .Net нет способа десериализации неизвестного объекта.

Чтобы успешно сериализовать / десериализовать объект XML, класс должен иметь конструктор по умолчанию. Лучший способ - показать нам точное сообщение об ошибке. Вы можете сделать это?

0 голосов
/ 26 ноября 2012

Почему бы сначала не сериализовать тип вашего класса (класс System.Type является сериализуемым)?

Затем вы можете проверить, какой тип был сериализован, и создать соответствующий экземпляр.

0 голосов
/ 13 октября 2009

вы можете использовать SerializationHelper.DeSerializeNow, как описано в моем посте: http://borismod.blogspot.com/2008/07/nunit-serialization-test.html

internal class SerializationHelper
{
  private static readonly string DefaultFilePath = "test.dat";

  internal static void SerializeNow(object c)
  {
    SerializeNow(c, DefaultFilePath);
  }

  internal static void SerializeNow(object c, string filepath)
  {
   FileInfo f = new FileInfo(filepath);
   using (Stream s = f.Open(FileMode.Create))
   {
      BinaryFormatter b = new BinaryFormatter();
    b.Serialize(s, c);
   }
  }

  internal static object DeSerializeNow()
  {
    return DeSerializeNow(DefaultFilePath);
  }

  internal static object DeSerializeNow(string filepath)
  {
    FileInfo f = new FileInfo(filepath);
    using (Stream s = f.Open(FileMode.Open))
    {
      BinaryFormatter b = new BinaryFormatter();
      return b.Deserialize(s);
    }
  }
}
0 голосов
/ 13 октября 2009

Другой, более эффективный (чем DOM или SAX) подход к связыванию данных содержится в этой статье :

...