【发布时间】:2019-09-30 15:35:42
【问题描述】:
我正在尝试将包含 List 的子对象的父对象序列化为 XML,该 XML 由一个父元素组成,每个子对象作为一个单独的元素。我希望在子类型被序列化的任何时候都适用,因此在子类型上实现IXmlSerializable 似乎很理想;但是,我还没有找到一个独立的解决方案。或者,可能向XmlSerializer 提供XmlAttributeOverrides?我不介意必须在 Parent 上添加属性,但想避免在 Parent 上进行任何 ISerializable 实现(因为我有许多类型可以引用 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>
我在 Child 上创建了一个 IXmlSerializable 实现:
public void WriteXml(XmlWriter writer) {
writer.WriteElementString(Name, Value.ToString());
}
并在Children 上添加了[XmlElement]。
哪个正确序列化了孩子,但它仍然会嵌套在父级下太深一层,例如:
<Parent>
<Children>
<Alice>this is alice</Alice>
</Children>
</Parent>
希望我错过了一些技巧。谢谢!
【问题讨论】:
-
我建议你在这个方面看起来不同。你想删掉children的list元素,为什么要这样做?序列化已经很好了。这有意义吗?
-
[XmlElement] 应该在上面: public List
Children { get;放; } -
@Aldert 我正在与之交互的遗留系统的范围内工作。我需要以预期的格式编写 XML,但这些集合项将在运行时动态添加。
-
好的,现在我明白你的局限性了..
标签: c# xml serialization