我有一些xml提供了通用属性(名称,类型等),其中属性的值需要是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>
我可以提供我用一些示例代码,但它不工作,我喜欢一些新鲜的观点。我正在使用一个由具有由属性“name”标识的单个属性的类反序列化的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无济于事。还有其他建议吗?
您的控件是XML格式还是使用外部源的XML? – gilly3
xml完全不在我的控制范围之内。 – John
我已经添加了一个关于如何做到这一点的例子。你会注意到它有点噩梦。这是因为你的XML看起来不像你想要表示的数据。 – RichardTowers