Web API アプリ用のカスタム XmlFormatter を開発しています。「IEnumerable」要素を異なる方法で処理したい。コードは次のとおりです。
class CustomXmlFormatter : XmlMediaTypeFormatter
{
public override Task WriteToStreamAsync(Type type, object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content, System.Net.TransportContext transportContext, System.Threading.CancellationToken cancellationToken)
{
XmlSerializer serializer;
return Task.Factory.StartNew(() =>
{
if ((typeof(IEnumerable<object>)).IsAssignableFrom(type))
{
XmlWriter writer = XmlWriter.Create(writeStream);
writer.WriteStartElement("array");
/* foreach (object o in (IEnumerable<object>)value)
{
serializer = new XmlSerializer(o.GetType());
serializer.Serialize(writeStream, o);
}*/
writer.WriteEndElement();
}
else
{
serializer = new XmlSerializer(type);
serializer.Serialize(writeStream, value, xsn);
}
});
リストを受け取ると、「配列」のタグを書き込み、リストのすべての要素をシリアル化するという考え方です。質問を簡単にするために foreach ループにコメントしました。
問題は、コードが実行されると、空の XML (「配列」タグなし) が書き込まれることです。どうすればそのようなものを実装できますか?