我有一個xml API,必須模擬字符。我試圖在.NET中使用內置的xml序列化功能,但它增加了一些額外的屬性。在NORMAL Web服務或xml API中,這些屬性不會損害任何內容,甚至可能達到目的。但他們是意想不到的角色,不幸的是,我不能允許他們。因此,這裏是我想要做什麼(當然,假設對象):序列化不帶類型和名稱空間屬性的派生類型
我有一個基本類型
public abstract class Instrument { }
...我有一個派生類
public class Guitar : Instrument { }
...我想派生類型序列化到這樣的事情:
<Guitar />
相反,我得到這樣的:
<Instrument d1p1:type="Guitar" xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance" />
這是一個測試我的工作:
[TestClass]
public class when_serializing_a_guitar
{
private XmlSerializer _serializer;
private string _expectedXml;
private StringWriter _stringWriter;
private string _actualXml;
private XmlSerializerNamespaces _ns;
private XmlWriter _xmlWriter;
private void WithThisContext()
{
_ns = new XmlSerializerNamespaces();
_ns.Add("", "");
_stringWriter = new StringWriter();
_xmlWriter = XmlWriter.Create(_stringWriter, new XmlWriterSettings
{
OmitXmlDeclaration = true,
CloseOutput = false
});
_serializer = new XmlSerializer(typeof(Instrument), new[] { typeof(Guitar) });
_expectedXml = @"<Guitar />";
}
private void BecauseOfThisAction()
{
_serializer.Serialize(_xmlWriter, new Guitar(), _ns);
_actualXml = _stringWriter.ToString();
}
[TestMethod]
public void it_should_return_the_expected_properly_formatted_xml()
{
WithThisContext();
BecauseOfThisAction();
Assert.AreEqual(_expectedXml, _actualXml);
}
}
知道我能做到這一點?
吉他和樂器只是簡單的例子。真正的對象要複雜得多。這裏的對象是序列化一個對象到XML ...不僅僅是爲了創建一個XML節點。 – 2011-04-11 13:59:07