Можно ли сериализовать общий список сериализуемых объектов без указания их типа.
Что-то вроде намерения, стоящего за сломанным кодом ниже:
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.
Извините за недостаток деталей, но я новичок в этом и не знаю, какие детали требуются. Было бы полезно, если бы люди, запрашивающие более подробную информацию, попытались ответить таким образом, который позволил бы мне понять, какие детали требуются, или дать базовый ответ с указанием возможных направлений.
Также спасибо за два ответа, которые я получил до сих пор - я мог бы потратить гораздо больше времени на чтение, не понимая этих идей. Удивительно, насколько полезны люди на этом сайте.