使用其他和不同的元素标记序列化C#对象

时间:2013-09-14 12:49:42

标签: c# xml serialization

我正在创建一个API包装器,它获取API响应并将其转换为POCO对象。 现在我有一个测试遵循这一系列的动作:

  • 使用XML元素名称和值创建对象。
  • 将此对象序列化为XML格式。
  • 通过我的转换器将XML树转换回实际对象。
  • 断言新对象中的值是否符合预期。

我有以下帮助类,它代表一个show对象:

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的上部集合。我该如何添加?

1 个答案:

答案 0 :(得分:3)

将Xml属性添加到POCO:

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; }
}
相关问题