2013-09-14 3 views
0

Я создаю оболочку API, которая получает ответ API и преобразует его в объекты POCO. Сейчас у меня есть тест, который следует за этой последовательностью действий:Сериализация объекта C# с дополнительными и разными тегами элементов

  • Создать объект с именами и значениями XML-элементов.
  • Сериализовать этот объект в формате XML.
  • Преобразуйте дерево XML в реальный объект через мой конвертер.
  • Утверждение, если значения внутри моего нового объекта как ожидалось.

У меня есть следующий класс помощника, который представляет собой шоу объект:

class TestShow { 
public string id { get; set; } 
public string IMDB_ID { get; set; } 
public string Language { get; set; } 
} 

сериализатором:

var serializer = new XmlSerializer(show.GetType()); 
string xml; 

using (var writer = new StringWriter()) { 
    serializer.Serialize(writer, show); 
    xml = writer.ToString(); 
} 

Однако, когда я сериализации это XML я получаю этот результат:

<?xml version="1.0" encoding="utf-16"?> 
<TestShow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <id>76290</id> 
    <IMDB_ID>tt0285331</IMDB_ID> 
    <Language>en</Language> 
</TestShow> 

Желаемый результат:

<Data> 
<Series> 
    <id>76290</id> 
    <IMDB_ID>tt0285331</IMDB_ID> 
    <Language>en</Language> 
</Series> 
</Data> 

Это показывает две проблемы:

  1. Имя TestShow должно быть изменено на Series. Есть ли простой способ сделать это, или я должен просто изменить имя моего класса?
  2. Существует верхняя коллекция под названием Data. Как бы добавить это?
+0

Что serialiser вы используете? –

+0

@SamLeach: Я добавил сериализатор. Это стандартный 'XmlSerializer'. –

+0

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

ответ

3

Добавить Xml атрибуты РоКо:

class TestShow 
{ 
    public string id { get; set; } 
    public string IMDB_ID { get; set; } 
    public string Language { get; set; } 
} 

[XmlRoot("Data")] 
class Data 
{ 
    [XmlElement("Series")] 
    public TestShow TestShow { get; set; } 
} 
+0

Тег 'XmlElement' генерирует ошибку:' Атрибут 'XmlElement' недействителен для этого типа объявления. Он действителен только для объявлений 'property, indexer, field, param, return'. Вы уверены, что он может быть помещен как тег класса? –

+0

@JeroenVannevel: Нет, его следует перенести, чтобы украсить 'public TestShow TestShow {get; задавать; } '. –

+0

@ChrisSinclair: приветствия, которые решили это. –

Смежные вопросы