Какие общие коллекции в C # являются IXmlSerializable? - PullRequest
3 голосов
/ 24 января 2009

Помечены ли какие-либо из общих коллекций .NET как IXmlSerializable? Я пробовал List и Collection , но ни одна из них не работает "из коробки".

Прежде, чем я сверну свою собственную коллекцию , список или класс словаря , я подумал, что должен проверить, включила ли Microsoft что-то, что уже делает это. Похоже, базовый функционал.

РЕДАКТИРОВАТЬ: Под «сворачиванием своего» я ​​подразумеваю создание класса, который наследуется от общего класса коллекции, а также реализует IXmlSerializable. Вот один пример: http://www.codeproject.com/KB/XML/IXmlSerializable.aspx. А вот еще один пример: http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx.

Я использую DataContractSerializer в методе, подпись которого выглядит следующим образом:

public static Stream GetXmlStream(IXmlSerializable item)

Проблема заключается в том, что, хотя в платформе .NET существует много классов, которые можно сериализировать, не все из них явно реализуют интерфейс IXmlSerializable.

Ответы [ 4 ]

5 голосов
/ 17 февраля 2009

Нет необходимости реализовывать IXmlSerializable для быть xml сериализуемым.

public class Foo 
{
    public List<string> Names { get; set; }
}

будет очень хорошо сериализовать XML, производя что-то вроде:

<?xml version="1.0" encoding="utf-16"?>
<Foo 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Names>
    <string>a</string>
    <string>b</string>
    <string>c</string>
  </Names>
</Foo>

, тогда как

public class Foo<T> 
{
    public List<T> Names {  get; set; }
}

будет производить

<?xml version="1.0" encoding="utf-16"?>
<FooOfString 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Names>
    <string>a</string>
    <string>b</string>
    <string>c</string>
  </Names>
</FooOfString>
4 голосов
/ 24 января 2009

Насколько я знаю, их нет. Вы можете взглянуть на прикрепленную ссылку, хотя. Я думаю, вы найдете это полезным.

Сериализация и десериализация объектов в формате XML с использованием универсальных типов в C # 2.0

2 голосов
/ 27 февраля 2009

Относительно вашего вопроса, если вы хотите сериализовать / десериализовать IDictionary, см. этот полезный пост . Я бы использовал шаблон, показанный здесь для ваших методов чтения и записи, поскольку они лучше справляются с различными ситуациями.

1 голос
/ 16 февраля 2009

После некоторых дальнейших исследований я пришел к такому же выводу. Начиная с версии .NET 3.5 SP1, ни одна из универсальных коллекций .NET не поддерживает IXmlSerializable.

...