сериализация IListXmlSerializer с общими списками - PullRequest
2 голосов
/ 18 сентября 2011

Я получаю какой-то тип IList<object[]>, что является лучшим способом сериализации в XML.А затем прочитайте его обратно к IList<object[]>.

Я просто не вижу простого способа сделать это.

Спасибо за помощь.

1 Ответ

6 голосов
/ 18 сентября 2011

XmlSerializer душит интерфейсы.Таким образом, вы можете преобразовать его в массив или конкретный List<T> перед сериализацией.Также вы должны указать абсолютно известные типы , потому что это object[] просто не будет работать.Сериализатор должен заранее знать все типы, с которыми вы будете иметь дело.Таким образом, он будет выдавать информацию о типе в результирующий XML:

var data = list.ToArray();
var knownTypes = new[] { typeof(Foo), typeof(Bar) };
var serializer = new XmlSerializer(data.GetType(), knownTypes);
serializer.Serialize(someStream, data);

Или, если вы не хотите беспокоиться обо всем этом, и просто получите некоторое удобочитаемое постоянство для ваших объектов, вы можете использовать Json:

var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(list);

И если вас не волнует удобочитаемость, двоичный сериализатор должен подойти.

...