将XML转换为c#对象
问题描述:
我试图创建一个类,它从一个目录中获取一个小的xml文件,并将其转换为一个对象,我总是遇到属性问题。我希望这个类有一个维度列表,以便它可以被调用。 Dimension [x] .id,Dimension [x] .name ....等。该类将被多次引用,但我希望它只在第一次将xml填充到对象中。将XML转换为c#对象
这里是XML,并感谢您在高级:
<?xml version="1.0"?>
<dimensions>
<dimensions id="0" name="Test" serverAddress = "cm.dt.funcom.com" port = "7509" />
<dimensions id="1" name="Atlantean" serverAddress = "cm.d1.funcom.com" port = "7501" />
<dimensions id="2" name="Rimor" serverAddress = "cm.d2.funcom.com" port = "7502" />
</dimensions>
答
我会尝试的东西,应该带走的属性焦虑。
生成(或使用现有的)适用于您的XML的XSD。下面这样的:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="dimensions">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="dimensions">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:unsignedByte" use="required" />
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="serverAddress" type="xsd:string" use="required" />
<xsd:attribute name="port" type="xsd:unsignedShort" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
使用可用的.NET中的xsd.exe工具(Visual Studio命令提示符将很好地设定的路径你)生成的类(假设上述XSD保存为converting-xml-into-a-c-sharp-object.xsd
):
xsd /c <fullpath-if-not-in-the-current-folder>converting-xml-into-a-c-sharp-object.xsd
生成的代码会是这样的(只是报头):
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Xml.Serialization;
//
// This source code was auto-generated by xsd, Version=4.0.30319.1.
//
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class dimensions {
private dimensionsDimensions[] dimensions1Field;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("dimensions")]
public dimensionsDimensions[] dimensions1 {
get {
return this.dimensions1Field;
}
set {
this.dimensions1Field = value;
}
}
}
下一步是编写代码引用此生成的类;有很多参考资料可以找到;一个介绍可以是一个例如this on SO。
以上XSD(“俄罗斯娃娃”)创作风格给类名称可能看起来不聪明; here是一个可能的解决方法。
+0
谢谢:)这是一帮帮忙! – 2013-02-22 21:45:18
你有什么尝试?你看起来在哪里?在*搜索框中输入“将XML转换为C#对象”会发生什么? – 2013-02-21 19:38:25
正如我上面提到的,我有属性的问题。如果它不属于属性,我可以将这个简单的方法解开。我已经习惯了最近太多的json – 2013-02-21 20:54:24
请参阅有关“如何正确实现IXmlSerializable”的帖子http://*.com/questions/5590592/help-with-implementing-ixmlserializable-on-this-xml – 2013-02-21 21:13:57