Я пытаюсь сериализовать класс, который наследуется от базового класса, который реализует IXmlSerializable.Как вернуться в стандартную сериализацию XML при реализации IXmlSerializable в базовом классе?
Базовый класс, называемый PropertyBag, является классом, который позволяет динамические свойства (credits to Marc Gravell).
Я внедрил IXmlSerializable, чтобы динамические свойства (хранящиеся в словаре) записывались как обычные элементы xml.
например. При сериализации класса Person с общественной собственностью (не динамическим) Наименованием и динамическим свойством Age, я хотел бы, чтобы он генерирует следующий XML:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
я могу получить часть работать со следующей реализацией не из WriteXml в базовом классе PropertyBag:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("DynamicProperties");
// serialize every dynamic property and add it to the parent writer
foreach (KeyValuePair<string, object> kvp in properties)
{
writer.WriteStartElement(kvp.Key);
StringBuilder itemXml = new StringBuilder();
using (XmlWriter itemWriter = XmlWriter.Create(itemXml))
{
// serialize the item
XmlSerializer xmlSer = new XmlSerializer(kvp.Value.GetType());
xmlSer.Serialize(itemWriter, kvp.Value);
// read in the serialized xml
XmlDocument doc = new XmlDocument();
doc.LoadXml(itemXml.ToString());
// write to modified content to the parent writer
writer.WriteRaw(doc.DocumentElement.OuterXml);
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
Однако при сериализации класса Person, он больше не упорядочивает обычные (не динамические) свойства, если я не перезаписать метод WriteXml в лицо (которое я не хочу делать). Есть ли способ, которым в базовом классе я могу автоматически добавлять статические свойства? Я знаю, что могу сделать это вручную, используя отражение, но мне было интересно, есть ли встроенная функциональность в .NET Framework?
Я думаю, вам следует избегать слова «статические», поскольку это имеет другое (совсем другое) значение ... –