Powiel możliwe:
How to serialize an IList<T>?Jak serializacji interfejs takich jak IList <T>
pragnę serializacji klasy (nazwijmy go S
), który zawiera właściwość typu IList<T>
gdzie T
to kolejna klasa, którą zdefiniowałem. Dostaję wyjątek, gdy próbuję serializować instancję klasy S
do XML. Jest to zrozumiałe, ponieważ XmlSerializer
nie wie, której konkretnej klasy użyć. Czy istnieje sposób, miejmy nadzieję, używając atrybutów, do określenia, która konkretna klasa ma być instancjonowana podczas serializowania/deserializacji instancji. Moja implementacja klasy S
tworzy instancję klasy List<T>
. Oto kod do zilustrowania mój przykład:
using System;
using System.Xml.Serialization;
using System.IO;
[Serializable]
public class T { }
[Serializable]
public class S
{
public IList<T> ListOfTs { get; set; }
public S()
{
ListOfTs = new List<T>();
}
}
public class Program
{
public void Main()
{
S s = new S();
s.ListOfTs.Add(new T());
s.ListOfTs.Add(new T());
XmlSerializer serializer = new XmlSerializer(typeof(S));
serializer.Serialize(new StringWriter(), s);
}
}
mam nadzieję jest atrybutem mogę umieścić powyżej definicji ListOfTs
że mówi do serialize „zakładają wystąpienie List<T>
podczas szeregowania/deserializacji”.
Zrobiłbym to, gdyby nie to zmieniło interfejs dla klasy 'S'. Chociaż jest mało prawdopodobne, aby miało to praktyczny wpływ, ale z zasady chciałbym sprawdzić, czy istnieje sposób na rozwiązanie problemu bez zmiany typu. –
Proponowane rozwiązanie, chociaż jest jedną pracę, może zrujnować publicznego API architekturę – bashis