我有一些带有通用属性(名称、类型等)的 xml,其中属性的值需要是 xml 被反序列化的属性。
我试图推送到一个类的 xml 类型的示例是:
<root>
<company>
<location>USA</location>
<name>TopCars</name>
</company>
<CarList name="CarCounts">
<ModelList name="Models">
<Column name="Ford">50</Column>
<Column name="Chevy">65</Column>
<Column name="Dodge">75</Column>
</ModelList>
</CarList>
</root>
我可以提供一些我用过的示例代码,但它不起作用,我想要一些新的前景。我正在使用由一个类反序列化的 xmlReader,该类具有由属性“名称”标识的单个属性,这无论如何都不是我想要的。我最终想要包含福特、雪佛兰和道奇属性的类模型(如果您反对此处的汽车结构,这是一个虚构的示例)。
XSD 会吐出这样的东西,这是我所期望的,但并不是我真正想要的:
[...]
<xs:element name="Column" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="Column_Text" msdata:Ordinal="1">
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
[...]
我不受这种技术的限制。我正在用 C# 开发。
任何帮助表示赞赏。
@RichardTowers:我使用列出的 xml 尝试了以下操作并收到错误“XML 文档 (1、2) 中存在错误”。
Base.Root[] cars = null;
XmlSerializer serializer = new XmlSerializer(typeof(Base.Root[]));
XmlReader reader = XmlReader.Create(new StringReader(xml));
cars = (Base.Root[])serializer.Deserialize(reader);
reader.Close();
我尝试使用 xmlElementAttribute 装饰器更改您建议的类,将“”添加到 xmlString 的开头。我也试过用 StreamReader 切换 StringReader 无济于事。还有其他建议吗?