【发布时间】:2020-10-05 19:33:39
【问题描述】:
我正在使用标准 .NET XmlSerializer 反序列化以下 xml:
<root>
<Element>
<Grouping1>
<Item1>First</Item1>
<Item2>Second</Item2>
</Grouping1>
<Grouping2>
<Item3>Third</Item3>
</Grouping2>
</Element>
</root>
我想把它序列化成下面的类:
class Element
{
[XmlElement("Item1")]
public string Item1 { get; set; }
[XmlElement("Item2")]
public string Item2 { get; set; }
[XmlElement("Item3")]
public string Item3 { get; set; }
}
这当然行不通,因为 - 例如 - <Item1> 不在 <Element> 中,而是在逻辑容器 <Grouping1> 中。
问题:
有没有办法告诉XmlSerializer 在<Grouping1> 元素中寻找Item1?[XmlElement("Grouping1.Item1")] 的行有问题
PS:我不想创建 Grouping1 类(建议 here),因为分组只是逻辑容器,不应该有自己的类。
【问题讨论】:
-
您可以使用 Xml Linq 创建类。序列化您必须创建一个自定义序列化。 XML 序列化需要一个类或元素用于每个唯一的标记名称。您有 Grouping1 和 Grouping2 需要两个类。您不能使用 Xml 序列化将 Grouping1 和 Grouping2 的子级归为一个类。
-
@jdweng 感谢您的回答!我当前的解决方案是删除
<Grouping1>和<Grouping2>标记,直到Grouping元素有一个具有通用名称的子元素之前都可以正常工作。你知道如何克服这个问题吗? -
您确定元素名称吗?
Grouping1,2,3和Item1,2,3?不应该只是Grouping和Item吗? -
@JQSOFT 我不太明白你想要什么,但我的问题可能会更好地可视化here。
Grouping1 - n 应该只是逻辑分组的占位符(就像上面示例中的Name一样)。Item也是如此,他们只是为某个属性重新命名。希望这有助于澄清
标签: c# xml serialization xml-serialization