我有一个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