То, чего я пытаюсь достичь, кажется довольно простым.
Учитывая класс
public class Wrapper<T> {
T Data { get; set; }
bool Success { get;set; }
List<Error> Errors { get; set; }
}
Я просто хочу, чтобы вывод XML для параметра Data был заключен в тег <Data></Data>
.
IE:
Желаемый вывод:
<Wrapper>
<Data>
<Person first="Bob" last="Robertson"/>
</Data>
<Errors/>
<Success>true</Success>
</Wrapper
Фактическая выработка:
<Wrapper>
<Person first="Bob" last="Robertson"/>
<Errors/>
<Success>true</Success>
</Wrapper>
Существует ли простая реализация IXmlSerializable, где я могу оставить сериализацию в одиночку большей частью и просто обернуть один элемент?
Редактировать: Это в службе WCF, поэтому у меня нет (насколько я знаю) доступа к созданию XmlSerializer.
Что я закончил делать:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteElementString("Success", Success.ToString());
writer.WriteStartElement("Errors");
foreach (var error in Errors)
{
Util.XmlSerialize(error, writer);
}
writer.WriteStartElement("Data");
Util.XmlSerialize(this.Data, writer);
writer.WriteEndElement();
}
-
public class Util
{
public static void XmlSerialize<T>(T obj, XmlWriter writer)
{
var nsSerializer = new XmlSerializerNamespaces();
nsSerializer.Add("", "");
var ser = new XmlSerializer(typeof (T));
ser.Serialize(writer, obj, nsSerializer);
}
}