Можно ли сериализовать общий список сериализуемых объектов, не указывая их тип.
Что-то вроде намерения за сломанным кодом ниже:
List<ISerializable> serializableList = new List<ISerializable>();
XmlSerializer xmlSerializer = new XmlSerializer(serializableList.GetType());
serializableList.Add((ISerializable)PersonList);
using (StreamWriter streamWriter = System.IO.File.CreateText(fileName))
{
xmlSerializer.Serialize(streamWriter, serializableList);
}
Edit:
Для тех, кто хотел узнать подробности: когда я пытаюсь запустить этот код, это ошибки в строке XMLSerializer [...]:
Невозможно выполнить сериализацию интерфейса System.Runtime.Serialization.ISerializable.
Если я перехожу на List<object>
, я получаю "There was an error generating the XML document."
. Деталь InnerException - "{"The type System.Collections.Generic.List1[[Project1.Person, ConsoleFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] may not be used in this context."}"
Объект person определяется следующим образом:
[XmlRoot("Person")]
public class Person
{
string _firstName = String.Empty;
string _lastName = String.Empty;
private Person()
{
}
public Person(string lastName, string firstName)
{
_lastName = lastName;
_firstName = firstName;
}
[XmlAttribute(DataType = "string", AttributeName = "LastName")]
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
[XmlAttribute(DataType = "string", AttributeName = "FirstName")]
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
PersonList - это всего лишь List<Person>
.
Это просто для тестирования, так что не чувствовал, что детали были слишком важны. Ключ у меня есть один или несколько разных объектов, все из которых являются сериализуемыми. Я хочу сериализовать их все в один файл. Я думал, что самый простой способ сделать это - разместить их в общем списке и сериализовать список за один раз. Но это не работает.
Я тоже пытался с List<IXmlSerializable>
, но с ошибкой
System.Xml.Serialization.IXmlSerializable cannot be serialized because it does not have a parameterless constructor.
Извините за отсутствие деталей, но я новичок в этом и не знаю, какая деталь требуется. Было бы полезно, если бы люди, просящие более подробно, пытались ответить таким образом, чтобы я мог понять, какие детали требуются, или основной ответ, излагающий возможные направления.
Кроме того, спасибо двум ответам, которые у меня есть до сих пор, я мог бы потратить гораздо больше времени на чтение, не получая эти идеи. Удивительно, насколько полезны люди на этом сайте.