Я пытаюсь сериализовать родительский объект, содержащий List
дочерних элементов, в XML, который состоит из родительского элемента с каждым дочерним объектом в качестве отдельного элемента. Я хотел бы, чтобы это применялось всякий раз, когда дочерний тип сериализуется, поэтому реализация IXmlSerializable
на дочернем типе кажется идеальной; Однако я не нашел самостоятельного решения. В качестве альтернативы, возможно предоставление XmlAttributeOverrides
для XmlSerializer
? Я не против добавления атрибутов в Parent, но хотел бы избежать любой реализации ISerializable на Parent (так как у меня есть много типов, которые могут иметь ссылки на Child).
Пример иерархии классов:
public class Parent {
public string Name { get; set; }
public string SomeProperty { get; set; }
// ....
public List<Child> Children { get; set; }
}
public class Child {
public string Name { get; set; }
public string Value { get; set; }
}
var o = new Parent {
Name = "Test Parent",
Children = new List<Child> {
new Child { Name = "Alice", Value = "This is alice's value" },
new Child { Name = "Bob", Value = "This is bob's value" }
}
};
Должен сериализоваться в:
<Parent>
<Name>Test Parent</Name>
<Alice>This is alice's value</Alice>
<Bob>This is bob's value</Bob>
</Parent>
Я создал реализацию IXmlSerializable для Child как:
public void WriteXml(XmlWriter writer) {
writer.WriteElementString(Name, Value.ToString());
}
И добавил [XmlElement]
на Children
.
Это правильно сериализует дочерний элемент, но он все равно будет вложен на один уровень слишком глубоко под Родителем, например ::
<Parent>
<Children>
<Alice>this is alice</Alice>
</Children>
</Parent>
Надеюсь, мне не хватает какой-то хитрости. Спасибо!