Мне нужно сериализовать объекты в XML в C #. Объекты должны быть завернуты в конверт. Для этого я создал следующий класс Envelope
:
[XmlInclude(typeof(Person))]
public class Envelope
{
public string SomeValue { get; set; }
public object WrappedObject { get; set; }
}
Я использую следующий код для сериализации класса:
string fileName = ...;
XmlSerializer serializer = new XmlSerializer(typeof(Envelope));
TextWriter textWriter = new StreamWriter(fileName);
try
{
serializer.Serialize(textWriter, <instance of envelope>);
}
finally
{
textWriter.Close();
}
Когда я присваиваю объект типа Person
WrappedObject
, я получаю следующий XML:
<Envelope>
<SomeValue>...</SomeValue>
<WrappedObject xsi:type="Person">
....
</WrappedObject>
</Envelope>
Проблема в том, что я хотел бы, чтобы тег для обернутого объекта был назван в честь фактического класса, который я передаю. Например, если я назначу экземпляр Person
для WrappedObject
, я бы хотел XML выглядит следующим образом:
<Envelope>
<SomeValue>...</SomeValue>
<Person>
....
</Person>
</Envelope>
Если я назначу экземпляр Animal
, я бы хотел получить
<Envelope>
<SomeValue>...</SomeValue>
<Animal>
....
</Animal>
</Envelope>
Как бы я этого достиг?
РЕДАКТИРОВАТЬ
На самом деле я немного упростил свой пример ... Обернутый объект снова обернут:
public class Envelope
{
public string SomeValue { get; set; }
public Wrapper Wrap { get; set; }
}
[XmlInclude(typeof(Person))]
public class Wrapper
{
public object WrappedObject { get; set; }
}
Как бы я справился с этим с помощью переопределения атрибутов?